2017-06-17 7 views
0

3つのデータテーブルA、B、Cを想像してください。AとBは共通の変数ID1を共有します。 BとCは共通変数ID2を共有します。この結果を得るための擬似クエリを作成します。表AとBの両方で一致するレコードを持つ表Bのすべてを選択します。ただし、表Cでは一致しません。複数の条件に基づいて3つのテーブルからデータを抽出するSQLクエリ

私の回答は以下のとおりです正しい):

Select * 
From table_b 
Left Join table_a 
On table_b.ID1 = table_a.ID1 
Where table_b.ID2 NOT IN table_c.ID2 

WHERE条件が与えられた条件のために働くならば、私はについて非常に懐疑的?私の答えにあなたの意見をお寄せください。ありがとう! IngoBのソリューションに似ていますが、少し読みやすく

+0

あなたの答えは、構文的に正しくありません。 –

答えて

1
Select * 
From table_b 
Left Join table_a On table_b.ID1 = table_a.ID1 
Where not exists (select * from table_c where table_c.ID2 = table_b.ID2) 
0

(私見)は

SELECT * 
FROM table_b 
LEFT OUTER JOIN table_a USING (id1) 
WHERE id2 NOT IN (SELECT id2 FROM table_c) 
+0

使用するデータおよびデータベースプラットフォームによって異なりますが、NOT EXISTSメソッドはNOT INよりも優れたパフォーマンスを発揮します。 SQL Serverの場合、この回答を参照してください。https://stackoverflow.com/questions/173041/not-in-vs-not-exists – Nathan

+0

どのソリューションが高速ですか?違いがある場合は、主にデータの分布に依存します両方のテーブルの索引付けを行います。 Oracleでこれを最後に見たとき、オプティマイザは常に両方のバリエーションで同じ実行計画を思いつきました。 – fhossfel

+0

*重要:*私のソリューションは、TABLE_C.ID2にNULL値がない場合にのみ、IngoBのものと同等です。私はそれがPK列であると仮定したため、NULL値はありませんでしたが、そうでない場合は、Ingoの解決策が正しいです。 – fhossfel

関連する問題