|  | | 
 
| 
           
             | 
                 
                   | Тема |  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 [филтъра, който искаш да използваш]
 
 
 
 
 |  |  |  |  
 
 |   | 
 |