我需要从表值< ent_id 或 ent_id_val 两列中不存在的 ent 表中删除记录/强>
耳鼻喉科
+--------+
| ent_id |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
值
+--------+------------+
| ent_id | ent_id_val |
+--------+------------+
| 1 | NULL |
| NULL | 2 |
+--------+------------+
ent_id可以位于值表中的ent_id和ent_id_val的列中。 在上面的示例中,我希望删除记录ent_id = 3。 下面是我的尝试,它确实删除了一些,但我想知道它为什么不完全删除所有?我仍然在值表中没有使用值表中的记录。
DELETE e.*
FROM ent e
LEFT JOIN value v1 on e.ent_id = v1.ent_id
LEFT JOIN value v2 on v2.ent_id_val = e.ent_id
WHERE v1.ent_id is null and v2.ent_id_val is null
答案 0 :(得分:3)
DELETE a
FROM ent a
LEFT JOIN value b
ON a.ent_ID = b.ent_ID
LEFT JOIN value c
ON a.ent_ID = c.ent_id_val
WHERE b.ent_ID IS NULL AND c.ent_id_val IS NULL;
OR
<击> 撞击>
<击>DELETE a FROM ent a
LEFT JOIN
(
SELECT ent_ID FROM value
UNION
SELECT ent_id_val AS ent_ID FROM value
) b ON a.ent_ID = b.ent_ID
WHERE b.ent_ID IS NULL
击> <击> 撞击>