Текущий архив: 2004.12.19;
Скачать: CL | DM;
Вниз
SQL. DELETE из одной (нескольких таблиц) при использ. нескольких Найти похожие ветки
← →
SergP. (2004-11-17 20:38) [0]1. Нужно удалить записи из одной таблицы, но при этом в запросе участвует несколько таблиц. Подскажите какой должен быть правильный синтаксис, а то что-то я запутался, а в JETSQL40.chm только простейшие примеры для одной таблицы.
Например:
Нужно удалить записи из table1, те которые удовлетворяют условию:
table1.field1=table2.field1 and table2.field2=<какое-то значение>
Конечто я пока обошелся вложенным select"ом, но интерестно как это без select"а записывается.
2. Как удалить записи сразу из 2-х таблиц? Можно ли такое делать?
← →
YurikGL © (2004-11-17 20:40) [1]1.
delete from table1 where field1="aa" and field2="bb"
2.
Что значит сразу? Одним запросом - вроде нет.
← →
sniknik © (2004-11-17 20:51) [2]> Нужно удалить записи из 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=<какое-то значение>
← →
SergP. (2004-11-17 20:53) [3]
> 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:56) [4]для более быстрого отрабатывания желательно иметь индексы по обьеденяемым полям
> Как удалить записи сразу из 2-х таблиц? Можно ли такое делать?
можно сделать внешний ключь с удалением связаных записей (удаляеш в одной во второй автоматом удалится)
читай JETSQL40.chm внимательнее (см "Предложение CONSTRAINT")
← →
ЮЮ © (2004-11-18 04:11) [5]Это запрос для 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)
)
← →
kostan © (2004-11-18 05:14) [6]< sniknik © (17.11.04 20:56) [4]
а что у Access есть внешние ключи?
(переходи на SQL сервера (типа IB) там есть Cascade)
← →
sniknik © (2004-11-18 08:23) [7]Ю © (18.11.04 04:11) [5]
не прокатит, но переделать возможно нужно только обьеденения сделать вложенными и все (вродебы, на первый взгляд).
kostan © (18.11.04 05:14) [6]
> а что у Access есть внешние ключи?
а что первый раз я невнятно сказал? у меня наверное манная каша между зубов застряла, когда писал... повторять тем не менее не буду.
> (переходи на SQL сервера (типа IB) там есть Cascade)
а потом переходи обратно, тут есть currency... (бред, хотя, неудачный пример он действительно здесь есть, а в IB нету (насколько знаю), а по аналогии с твоим советом надо было взять чтото что и там и там есть)
Страницы: 1 вся ветка
Текущий архив: 2004.12.19;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.023 c