选择没有一对多关系的行的最佳方法

时间:2015-01-07 11:47:50

标签: sql sql-server sql-server-2008

我想选择没有记录到DOCUMENT表中的表PERSON的所有行,其中主表为FK。

对我来说什么可能更好? LEFT JOIN?不是吗?还有其他解决办法吗?

这是一个简单的方案:

PERSON

personId
personName
personSex

DOCUMENT

documentId
FK_Person

提前谢谢

2 个答案:

答案 0 :(得分:3)

使用left join并检查指向其他表的链接是否失败(is null

select p.*
from person p
left join document d on p.personId = d.fk_person
where d.fk_person is null

请参阅this explanation of joins

答案 1 :(得分:2)

尝试使用not existleft join

select P.* 
from   PERSON P left join DOCUMENT D on P.personId = D.FK_Person
where  D.FK_Person is null

OR

select * from PERSON P 
where not exists (select 1 from DOCUMENT D where P.personId = D.FK_Person)