获取与任何外键无关的主键记录
问题描述:
我有以下两个表,关联公司和推荐人。获取与任何外键无关的主键记录
:子公司表
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,因为这个分支机构没有与任何推荐人相关联。
答
SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid
FROM affiliates
WHERE affiliates.id NOT IN (Select Distinct referrers.affiliates_id From affiliates)
答
由于您的引用表是一对多的,因此随着表的增长,执行子选择会降低性能。
我不是一个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
你至少应该添加一个SELECT DISTINCT,如果你打算这样做 – 2009-04-24 01:52:06
固定它,谢谢。 – Jeremy 2009-04-24 01:59:02