![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL. DELETE из одной (нескольких таблиц) при использ. нескольких [D6, access]
SergP. © (2004-11-17 20:38:00)1. Нужно удалить записи из одной таблицы, но при этом в запросе участвует несколько таблиц. Подскажите какой должен быть правильный синтаксис, а то что-то я запутался, а в JETSQL40.chm только простейшие примеры для одной таблицы.
Например:
Нужно удалить записи из table1, те которые удовлетворяют условию:
table1.field1=table2.field1 and table2.field2=<какое-то значение>
Конечто я пока обошелся вложенным select'ом, но интерестно как это без select'а записывается.
2. Как удалить записи сразу из 2-х таблиц? Можно ли такое делать?
sniknik (2004-11-18 08:23:00) [1]Ю © (18.11.04 04:11) [5]
не прокатит, но переделать возможно нужно только обьеденения сделать вложенными и все (вродебы, на первый взгляд).
kostan © (18.11.04 05:14) [6]
> а что у Access есть внешние ключи?
а что первый раз я невнятно сказал? у меня наверное манная каша между зубов застряла, когда писал... повторять тем не менее не буду.
> (переходи на SQL сервера (типа IB) там есть Cascade)
а потом переходи обратно, тут есть currency... (бред, хотя, неудачный пример он действительно здесь есть, а в IB нету (насколько знаю), а по аналогии с твоим советом надо было взять чтото что и там и там есть)
kostan (2004-11-18 05:14:00) [2]< sniknik © (17.11.04 20:56) [4]
а что у Access есть внешние ключи?
(переходи на SQL сервера (типа IB) там есть Cascade)
ЮЮ (2004-11-18 04:11:00) [3]Это запрос для MS SQL. Возможно и в Access подобное прокатит
DELETE FROM E_Staff
WHERE
Id IN (
SELECT s.ID
FROM
E_Staff s
LEFT JOIN EI_Vacancies iv ON s.Id = iv.Staff
LEFT JOIN E_Vacancies v ON s.Id = v.Staff
LEFT JOIN E_VacDocEntryVacancies dv ON s.Id = dv.Staff
WHERE
(s.WorkerOccupation IS NULL) AND (s.EmployeeOccupation IS NULL) AND
(iv.ID IS NULL) AND (v.ID IS NULL) AND (dv.ID IS NULL)
)
sniknik (2004-11-17 20:56:00) [4]для более быстрого отрабатывания желательно иметь индексы по обьеденяемым полям
> Как удалить записи сразу из 2-х таблиц? Можно ли такое делать?
можно сделать внешний ключь с удалением связаных записей (удаляеш в одной во второй автоматом удалится)
читай JETSQL40.chm внимательнее (см "Предложение CONSTRAINT")
SergP. (2004-11-17 20:53:00) [5]
> YurikGL © (17.11.04 20:40) [1]
> 1.
> delete from table1 where field1='aa' and field2='bb'
Нет. Я имел ввиду удаление из одной таблицы, но в запросе должно участвовать несколько...
Записи должны удаляться из table1, но в запросе участвуют table1 и table2. По такому условию (в упрощенном виде):
> table1.field1=table2.field1 and table2.field2=<какое-то
> значение>
> 2.
> Что значит сразу? Одним запросом - вроде нет.
просто в условии для удаления есть связи между этими двумя таблицами. Разве нельзя писать: delete from table1,table2 where ...?
sniknik (2004-11-17 20:51:00) [6]> Нужно удалить записи из table1, те которые удовлетворяют условию:
> table1.field1=table2.field1 and table2.field2=<какое-то значение>
DELETE a.* FROM table1 a INNER JOIN table2 b ON a.field1=b.field1 WHERE b.field1=<какое-то значение>
YurikGL (2004-11-17 20:40:00) [7]1.
delete from table1 where field1='aa' and field2='bb'
2.
Что значит сразу? Одним запросом - вроде нет.