2009-04-24 33 views
1

私は以下の2つのテーブル、アフィリエイト、および参照元を持っています。外部キーに関連付けられていないプライマリキーレコードを取得する

関連会社表

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

あなたは –

+0

がそれを修正することをやろうとしている場合は、少なくともSELECT DISTINCTを追加する必要があり、感謝します。 – Jeremy

5

リフェレーターテーブルが1対多であるため、サブ選択を実行すると、テーブルが大きくなるとパフォーマンスが低下します。

私は、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 
+0

私は一般にこのアプローチを好む。 – Joe

関連する問題