选择其ID未出现在多个表中的记录

时间:2013-05-28 23:19:47

标签: sql sqlite

我有3张桌子。两个表(par1,par1)都将(child_id)引用到第3个表(子)中的id。

我喜欢在第3个表中找到孤儿,即其他两个表中没有引用的记录。

如果我只有一次引用表,我可以写:

SELECT * FROM child WHERE id NOT IN (SELECT child_id FROM par1)

但是如何为两个引用表解决这个问题呢?

我正在使用sqlite。

2 个答案:

答案 0 :(得分:5)

SELECT * 
FROM child 
WHERE id NOT IN (SELECT child_id FROM par1) AND 
      id NOT IN (SELECT child_id FROM par2)

答案 1 :(得分:0)

另一种方法是使用LEFT OUTER JOIN:

SELECT child.*
FROM child LEFT OUTER JOIN par1 ON (child.id = par1.child_id)
           LEFT OUTER JOIN par2 ON (child.id = par2.child_id)
WHERE par1.child_id IS NULL AND par2.child_id IS NULL

执行子查询可能会也可能不会在SQLite索引决策引擎中找到所需的优化路径。