我有以下两张表,附属机构和推荐人。
附属机构表
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,因为该联属会员与任何推荐人无关。
答案 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)