[SQL]如何使用 LEFT JOIN 和 DELETE 删除连接的 table 列上所有包含 NULL 值的行

[SQL]How to delete all rows containing NULL value on the joined table column using LEFT JOIN and DELETE

我正在尝试删除与另一行无关的每一行 table。

这是我尝试过的:

DELETE obj FROM objednavky obj 
    LEFT JOIN polozky_objednavek poObj
            ON poObj.objednavka_id = obj.id
            WHERE poObj.objednavka_id = null

DELETE 只对一个 table 有效,因此不应加入。不过,您可以在 WHERE 子句中使用另一个 table,如下所示:

DELETE FROM objednavky obj 
  WHERE( SELECT objednavka_id FROM polozky_objednavek WHERE objednavka_id=objednavky.id) IS NULL

如果您手动执行此操作,我建议 运行 首先使用 SELECT 子句(或至少一个 COUNT 变体)来检查您是否会不小心清除整个 table.

您可以使用 NOT EXISTS。 试试这个:

DELETE FROM objednavky obj
WHERE NOT EXISTS (
      SELECT
          *
      FROM
          polozky_objednavek poObj
      WHERE
           `poObj`.`objednavka_id` = `obj`.`id`);

Demo

DELETE obj FROM objednavky obj 
    LEFT JOIN polozky_objednavek poObj
            ON poObj.objednavka_id = obj.id
            WHERE poObj.objednavka_id IS null

感谢@forpas 的评论,我只需要将:

item = NULL
更改为
item IS NULL
并完全按照我的需要工作。请记住,SQL 不支持此类比较。