为什么这个MySQL查询没有删除任何行?

时间:2013-03-06 13:52:22

标签: mysql join

从表面上看,我的用例非常简单。我有两个表:orderlineorder包含iddatetimelineid表中引用order。不幸的是,这是一个非常古老的系统,我不能(即不允许修改系统)使用带有更新/删除触发器的外键。

我是reading this question并写了我自己的查询来做类似的事情。基本上我想在订单被删除时删除与line相关联的所有order,只要该订单超过两年:

DELETE a
FROM 
  `line` AS a
  LEFT JOIN `order` AS b ON a.`order_id` = b.`id`
WHERE
  b.`datetime` < DATE_SUB(NOW(), INTERVAL 2 YEAR);

目前没有任何事情发生 - 没有行受到影响。将查询更改为仅使用相同的join和where子句进行选择,可以很好地返回一些结果。

我在这里缺少什么?

4 个答案:

答案 0 :(得分:2)

文档说tbl_name,而不是table_references。所以这可能有用:

DELETE line
FROM 
  line
  LEFT JOIN `order` AS b ON line.`order_id` = b.`id`
WHERE
  b.`datetime` < DATE_SUB(NOW(), INTERVAL 2 YEAR);

答案 1 :(得分:1)

DELETE命令用于删除整行,因此正确的语法是

DELETE FROM yourtable WHERE...

如果你执行DELETE(某事)FROM将无法正常工作

希望有所帮助

答案 2 :(得分:0)

DELETE FROM 
  `line`
WHERE
   order_id IN 
      (SELECT id
       FROM order
       WHERE `datetime`< DATE_SUB(NOW(), INTERVAL 2 YEAR)

答案 3 :(得分:0)

试试这个:

DELETE FROM `line` WHERE `order_id` IN (SELECT `id` FROM `order` 
WHERE `datetime` < DATE_SUB(NOW(), INTERVAL 2 YEAR));

我可能会更重。