2017-04-11 10 views
2
table1   table2    table3   Expected Result 
-------------  --------------  ------------- ------ 
| id | col1 |  | id | col1 |  | id | col1 | | id | 
-------------  --------------  ------------- ------ 
| 1 | val1 |  | 2 | val1 |  | 3 | val1 | | 1 | 
| 2 | val2 |  | 2 | val2 |  | 3 | val2 | | 6 | 
| 3 | val3 |  | 4 | val1 |  | 5 | val1 | ------ 
| 4 | val4 |  | 4 | val2 |  | 5 | val2 | 
| 5 | val5 |  --------------  ------------ 
| 6 | val6 | 
------------- 

テーブル2とテーブル3にないテーブル1のIDを選択します。そのために、私はクエリを書いたが、実行には時間がかかりすぎる。より良いクエリで私を提案してください。2つのテーブルに存在しない値を選択

私が使用しているクエリが SELECT DISTINCT(id) FROM table1 WHERE yacht_id NOT IN (SELECT id FROM table2 UNION SELECT id FROM table3 ORDER BY id)

+2

これがnull参加したすべての値を選択してみてくださいすることができ

SELECT id FROM table1 WHERE yacht_id NOT IN (SELECT id FROM table2) OR yacht_id NOT IN (SELECT id FROM table3) 

答えて

2

あなたのクエリが細かいですが、選択肢はnull秒でそれらをマッチング、これはtable1からすべての行を保持しますleft join

select t1.id 
from table1 t1 
left join 
     table2 t2 
on  t1.id = t2.id 
left join 
     table3 t3 
on  t1.id = t3.id 
where t2.id is null and t3.id is null 

を使用しているときidはtable2またはtable3にはありません。

table2table3の両方でnullの行をフィルタリングするだけです。

1

は、なぜあなたはあなたが基本的には、その後に参加しようとする可能性があり

2
SELECT * FROM table1 a 
LEFT JOIN table2 b on a.id = b.id 
LEFT JOIN table3 c on a.id = c.id 
WHERE b.id is null and c.id is null 

では、2つが別々しようとしません。
+0

あなたはむしろ... LEFT JOIN table3 c'を意味しないのですか? – butterFlyNick

関連する問題