2009-04-24 35 views
1

我有以下兩個表,關聯公司和推薦人。獲取與任何外鍵無關的主鍵記錄

子公司表

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,因爲這個分支機構沒有與任何推薦人相關聯。

回答

1
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

5

由於您的引用表是一對多的,因此隨着表的增長,執行子選擇會降低性能。

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