2010-05-04 109 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