Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.
Что значит сразу? Одним запросом - вроде нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо