SELECT当子记录不存在时

时间:2013-06-14 17:29:23

标签: sql oracle select

我有两张表parentchildrenparent.mopidchildren.mopid是两个表之间的连接。我如何写一个最终结果的SELECT只显示没有子记录的父记录?

3 个答案:

答案 0 :(得分:3)

如果您有很多行,LEFT JOIN通常比NOT IN更快。但并非总是如此 - 这取决于数据,所以请尝试这个答案和@aktrazer中的答案,看看哪个最适合你。

SELECT parent.*
FROM parent
LEFT JOIN children ON parent.mopid = children.mopid
WHERE children.mopid IS NULL

如果children没有mopid行,parent.mopid将有一个值,但child.mopid将为空。

答案 1 :(得分:3)

SELECT * from parent p where NOT EXISTS 
( select mopid from children c where p.mopid = c.mopid)

这也应该处理空值

此链接将向您解释NOT IN和NOT EXISTS

之间的区别

NOT IN vs NOT EXISTS

答案 2 :(得分:2)

使用NOT IN功能:

SELECT * from parent
where parent.mopid NOT IN (SELECT mopid from children)

这将返回父表中所有在子表中没有相应mopid的行。