我有两张表parent
和children
。 parent.mopid
和children.mopid
是两个表之间的连接。我如何写一个最终结果的SELECT
只显示没有子记录的父记录?
答案 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
之间的区别答案 2 :(得分:2)
使用NOT IN
功能:
SELECT * from parent
where parent.mopid NOT IN (SELECT mopid from children)
这将返回父表中所有在子表中没有相应mopid的行。