删除连接中不存在的记录

时间:2011-06-26 01:34:46

标签: mysql sql database

想象一下两个表(A和B):

A        B
1        2
2        3 
6        5 
4        7
9        11
         13
         23
         9 

现在我想从A中删除B中不存在的记录,例如从A中删除1,6和4。

我最初的想法是你可以'否定'加入的结果。

3 个答案:

答案 0 :(得分:6)

DELETE FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.id = B.id)

我假设这些列名为id

答案 1 :(得分:4)

NOT EXISTS答案的替代方案:

DELETE FROM A WHERE id NOT IN (SELECT id FROM b);

再次,假设该列名为id

答案 2 :(得分:1)

您可以通过在外部联接的一侧查找NULL值来找到不匹配的记录,然后删除它们:

DELETE FROM A
WHERE id IN
   (
   SELECT A.id
   FROM A
   LEFT JOIN B
   ON A.id = B.id
   WHERE B.id IS NULL  -- This means we only return unmatched A records
   )

我喜欢这个的主要原因是你可以预先运行声明的SELECT部分,以便检查你的工作。否则其他答案看起来更清晰。