1

我需要从ent表中删除表值中ent_ident_id_val列中都不存在的记录

耳鼻喉科

+--------+
| ent_id |
+--------+
|      1 |
|      2 |
|      3 |
+--------+

价值

+--------+------------+
| ent_id | ent_id_val |
+--------+------------+
|      1 |       NULL |
|   NULL |          2 |
+--------+------------+

ent_id 可以在值表中的 ent_id 和 ent_id_val 列中。在上面的示例中,我希望删除记录 ent_id = 3。下面是我的尝试,它确实删除了一些,但我想知道为什么它没有完全删除?我在ent表中仍有记录,但未在表中使用。

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
4

1 回答 1

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;

或者

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

于 2012-10-30T13:06:37.573 回答