|
Тема
|
DELETE със JOIN
|
|
Автор |
БM21 (непознат
) |
Публикувано | 08.03.10 14:57 |
|
Гледам разни примери за командата DELETE но всички са доста елементарини и в WHERE има само изрази с колони от таблицата, в която се трие. Как ще се направи изтриване с JOIN? Например, имам две таблици: Table1 и Table2. В първата - колони workerID и Sum, във втората workID и Status. Как може да се направи нещо от вида
Delete from table1 where workerid=workid and status='Active'
| |
Тема
|
Re: DELETE със JOIN
[re: БM21]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 09.03.10 00:55 |
|
Винаги можеш да заменис 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>
| |
Тема
|
Re: DELETE със JOIN
[re: БM21]
|
|
Автор |
salle (един такъв) |
Публикувано | 09.03.10 15:58 |
|
Зависи кой сървър ползваш.
MySQL поддържа два варианта на такъв синтаксис:
DELETE FROM table1 USING table1 JOIN table2 ON ... WHERE ....
или
DELETE table1 FROM table1 JOIN table2 ON .. WHERE ...
за другите сървъри не знам
| |
Тема
|
Re: DELETE със JOIN
[re: salle]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 09.03.10 17:20 |
|
Втория синтаксис се поддържа от MSSQL. Същия синтаксис е и при UPDATE.
| |
Тема
|
Re: DELETE със JOIN
[re: wqw]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 17.03.10 13:43 |
|
В PostgreSQL се поддържа някаква вариация на първия синтаксис:
DELETE FROM x USING y WHERE x.id=y.id;
Иначе твоето предложение с подзаявките ми се струва най-чисто.
"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - БисмаркРедактирано от Dakota на 17.03.10 13:44.
| |
|
Аз в такива случаи предпочитам EXIST или IN.
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
| |
|
Опитай така:
DELETE FROM TableA
FROM
TableA a
INNER JOIN TableB b
ON b.BId = a.BId
AND [филтъра, който искаш да използваш]
| |
|
|
|
|