2010-05-04 115 views
143

我有兩個表格,一個用於工作截止日期,一個用於描述工作。每個工作都可以採取一種狀態,一些狀態意味着工作的最後期限必須從另一個表中刪除。使用MySQL LEFT JOIN刪除行

我可以很容易地SELECT符合我的標準與LEFT JOIN作業/截止日期:

SELECT * FROM `deadline` 
LEFT JOIN `job` ON deadline.job_id = job.job_id 
WHERE `status` = 'szamlazva' 
OR `status` = 'szamlazhato' 
OR `status` = 'fizetve' 
OR `status` = 'szallitva' 
OR `status` = 'storno' 

status屬於job表中未deadline

但是,當我想刪除這些行從deadline,MySQL會引發錯誤。我的查詢是:

DELETE FROM `deadline` 
LEFT JOIN `job` 
ON deadline.job_id = job.job_id 
WHERE `status` = 'szamlazva' 
OR `status` = 'szamlazhato' 
OR `status` = 'fizetve' 
OR `status` = 'szallitva' 
OR `status` = 'storno' 

MySQL錯誤說什麼:

你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用手動附近「LEFT JOIN job ON deadline.job_id = job.job_id WHERE status =‘szaml’在行1

如何我把我SELECT進入工作DELETE查詢?

回答

260

您只需指定應用DELETE的表格即可。

只刪除deadline行:

DELETE `deadline` FROM `deadline` LEFT JOIN `job` .... 

刪除deadlinejob行:

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` .... 

只刪除job行:

DELETE `job` FROM `deadline` LEFT JOIN `job` .... 
+5

同時使用「('szamlazva','szamlazhato','fizetve',.........)中的狀態」 – Salil 2010-05-04 06:31:12

+3

使用「AS」時,我不得不在我的子句中使用別名以使其適用於我目的(刪除孤兒):DELETE T1 FROM表1爲T1 LEFT JOIN T2爲T2 ON t1.uid = t2.result WHERE t2.result IS NULL – Urs 2013-08-26 18:19:08

+0

參考:http://dev.mysql.com/doc/ refman/5.7/en/delete.html – Slawa 2013-10-24 13:27:31

1
DELETE FROM deadline where ID IN (
    SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno'); 

我不確定這種子查詢是否適用於MySQL,但嘗試它。我假設你在截止日期表中有一個ID列。

+1

OP仍然需要指定「刪除」以使查詢無歧義。在子查詢中使用'In'會讓所有事情變得更慢。這是最好的避免。 – 2013-01-07 16:44:54

+0

'DELETE'和'FROM'之間沒有提到的表。 – 2017-11-09 10:31:14

25

如果您正在使用「表爲「,然後指定它爲刪除。

在這個例子中,我刪除了table_2中不存在的所有table_1行。

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL 
+0

@羅曼洛什夫 - 什麼地方在哪裏1 – vmanta 2015-02-17 16:11:57

+0

這是我的默認選擇方法...對不起,爲此。忘記刪除。編輯後。 – 2015-02-18 11:22:24