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

问题描述:

我有以下两个表,关联公司和推荐人。获取与任何外键无关的主键记录

子公司表

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) 
+0

你至少应该添加一个SELECT DISTINCT,如果你打算这样做 – 2009-04-24 01:52:06

+0

固定它,谢谢。 – Jeremy 2009-04-24 01:59:02

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

我不是一个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