2016-06-15 6 views
0

私が持っているにtableA選択し

id | name  
-------------- 
1 | John 
2 | Alice  
3 | Bob 

とテーブルB

id | tableA_id | setting 
-------------------------- 
1 | 1   | 1 
2 | 2   | 0 

私はテーブル内のすべての固有のIDを選択します私は

を受け取りたい= 0

例表Bの設定状態とテーブルBに存在しません

私は、クエリを使用することができます:

SELECT * FROM tableA WHERE id NOT IN (SELECT tableA_id from tableB WHERE setting = 0) 

をしかし、私は2つのテーブルが大きいので、それはゆっくりとだと思います。私はこのクエリがパフォーマンスに影響を与えると思います。

どうすればいいですか?

答えて

1

はこれを試してみてください;)

select t1.* 
from tableA t1 
left join tableB t2 
on t1.id = t2.tableA_id 
where t2.setting <> 0 or t2.id is null 

DEMO HERE

またはこの:

select * 
from tableA 
where not exists (
    select 1 from tableB where tableA.id = tableB.tableA_id and tableB.setting = 0 
) 

DEMO HERE

+0

いや、それは働いていない – Drew

+0

をin'ない '何でも。ケース1の場合、結果は1レコード "1 | John" ケース2の場合、結果にはテーブルaのすべてが含まれます – Khaihkd

+0

@Khaihkdケース1が間違っていて、更新しました。デモを確認してください。ケース2は正しいと思われ、デモもご確認ください。:D – Blank

関連する問題