DELETE със JOIN

6 отговора 0 прегледа
#1

DELETE със JOIN

Гледам разни примери за командата DELETE но всички са доста елементарини и в WHERE има само изрази с колони от таблицата, в която се трие. Как ще се направи изтриване с JOIN? Например, имам две таблици: Table1 и Table2. В първата - колони workerID и Sum, във втората workID и Status. Как може да се направи нещо от вида
Delete from table1 where workerid=workid and status='Active'

Отговор
в отговор на БM21 #2

Re: DELETE със JOIN

Винаги можеш да заменис JOIN със IN или с EXISTS така например
DELETE Table1

WHERE EXISTS (SELECT *
FROM Table2
WHERE WorkID = Table1.WorkerID
AND Status = 'Active')

Иначе в T-SQL имаш JOIN при DELETE да не се зориш. Не работи на VIEW-та с INSTEAD OF тригери, но това надали те касае.

cheers,
</wqw>

[линк]
Отговор
в отговор на БM21 #3

Re: DELETE със JOIN

Зависи кой сървър ползваш.

MySQL поддържа два варианта на такъв синтаксис:

DELETE FROM table1 USING table1 JOIN table2 ON ... WHERE ....
или
DELETE table1 FROM table1 JOIN table2 ON .. WHERE ...

[линк]

за другите сървъри не знам

salle.online.bg/sig
Отговор
в отговор на salle #4

Re: DELETE със JOIN

Втория синтаксис се поддържа от MSSQL. Същия синтаксис е и при UPDATE.

[линк]
Отговор
в отговор на wqw #5

Re: DELETE със JOIN

В PostgreSQL се поддържа някаква вариация на първия синтаксис:

DELETE FROM x USING y WHERE x.id=y.id;

Иначе твоето предложение с подзаявките ми се струва най-чисто.

"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - Бисмарк

Редактирано от Dakota на

Отговор
в отговор на Dakota #6

Re: DELETE със JOIN

Аз в такива случаи предпочитам EXIST или IN.

General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Отговор
в отговор на БM21 #7

Re: DELETE със JOIN

Опитай така:

DELETE FROM TableA
FROM
TableA a
INNER JOIN TableB b
ON b.BId = a.BId
AND [филтъра, който искаш да използваш]

Отговор