获取与任何外键无关的主键记录

时间:2009-04-24 01:08:55

标签: sql

我有以下两张表,附属机构和推荐人。

附属机构表

id    loginid    
3     CR0007
2     CR5604
4     VRTC0008

推荐人表

id    affiliates_id    loginid    
3     2                MLT29710
4     3                MX0001

如果我想知道,联盟会员与推荐人相关联,我可以简单地使用以下查询:

SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid FROM affiliates, referrers WHERE affiliates.id = referrers.affiliates_id

结果表

affiliates_loginid    referrers_loginid    
CR5604                MLT29710
CR0007                MX0001

如果,我想知道,哪个联盟会员与任何推荐人无关。我可以使用的单个SQL语句是什么?将where子句更改为 affiliates.id!= referrers.affiliates_id 当然不会有效。

我的预期结果是VRTC0008,因为该联属会员与任何推荐人无关。

2 个答案:

答案 0 :(得分:5)

由于您的referrers表是一对多,因此随着表的增长,执行子选择会降低性能。

我不是SQL忍者,但我会这样做:

SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid 
FROM affiliates 
LEFT OUTER JOIN referrers ON(referrers.affiliates_id = affiliates.id)
WHERE referrers.affiliates_id IS NULL

答案 1 :(得分:1)

SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid 
 FROM affiliates 
 WHERE affiliates.id NOT IN (Select Distinct referrers.affiliates_id From affiliates)