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

Che*_*eng 1 sql

我有以下两个表,附属机构和推荐人.

附属公司表

id    loginid    
3     CR0007
2     CR5604
4     VRTC0008
Run Code Online (Sandbox Code Playgroud)

推荐人表

id    affiliates_id    loginid    
3     2                MLT29710
4     3                MX0001
Run Code Online (Sandbox Code Playgroud)

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

SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid FROM affiliates, referrers WHERE affiliates.id = referrers.affiliates_id
Run Code Online (Sandbox Code Playgroud)

结果表

affiliates_loginid    referrers_loginid    
CR5604                MLT29710
CR0007                MX0001
Run Code Online (Sandbox Code Playgroud)

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

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

Cha*_*ant 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
Run Code Online (Sandbox Code Playgroud)