[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`);
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 不支持此类比较。
我正在尝试删除与另一行无关的每一行 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`);
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 不支持此类比较。