1

テーブル値の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 のレコードを削除したいと考えています。以下は私が試みたものです。一部は削除されますが、すべてが完全に削除されないのはなぜですか? 値テーブルで使用されていない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 に答える