删除两列中不存在的记录

时间:2012-10-30 13:05:14

标签: mysql

我需要从表值< 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

1 个答案:

答案 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

<击>