1

我有两张桌子parentchildren. parent.mopidandchildren.mopid是两个表之间的连接。我将如何编写SELECT最终结果只显示没有子记录的父记录?

4

3 回答 3

3

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

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

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

于 2013-06-14T17:35:07.890 回答
3
SELECT * from parent p where NOT EXISTS 
( select mopid from children c where p.mopid = c.mopid)

这也应该处理空值

此链接将向您解释 NOT IN 和 NOT EXISTS 之间的区别

不存在与不存在

于 2013-06-14T17:39:09.753 回答
2

Use the NOT IN function:

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

This will return all rows from the parent table that do not have a corresponding mopid in the childrens table.

于 2013-06-14T17:31:36.863 回答