繁体   English   中英

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

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

我试图摆脱与另一张表没有关系的每一行。

这是我尝试的:

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

DELETE仅在一个表上工作,因此不应将其联接。 您可以在WHERE子句中使用另一个表,如下所示:

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

如果您是手动执行此操作,建议您首先运行SELECT子句(或至少运行COUNT变体),以确保您不会意外擦除整个表。

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

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

演示版

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
  项目为NULL 
并按照我的需要精确地工作。 请记住,SQL不支持这种类型的比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM