我有3张桌子。两个表(par1,par1)都将(child_id)引用到第3个表(子)中的id。
我喜欢在第3个表中找到孤儿,即其他两个表中没有引用的记录。
如果我只有一次引用表,我可以写:
SELECT * FROM child WHERE id NOT IN (SELECT child_id FROM par1)
但是如何为两个引用表解决这个问题呢?
我正在使用sqlite。
答案 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索引决策引擎中找到所需的优化路径。