2017-05-14 5 views
0

私は2つのテーブルを持っており、私はSQLクエリの魔女が基本テーブルの名前からidbを選択する必要があります。他のテーブルの特定の値を含まないテーブルの行をリスト表示

basic_table: 
idb... name ... value 
1  color red 
2  style modern  

second_table 
id ... idb ... second 
1  1  green 
2  1  yellow 
3  2  red 
4  2  blue 

結果は次のようになります。

idb... name 
2  style 

このクエリは、我々は緑でそれを持っているので、IDP 1が含まれますが、除外すべきです。

SELECT 
    `basic_table`.`idp`, `basic_table`.`name` 
FROM 
`basic_table` 
    LEFT JOIN `second_table` 
     ON (`basic_table`.`idp` = `second_table`.`idp`) 
WHERE (`second_table`.`second` NOT LIKE '%yellow%') 

答えて

2

あなたは簡単にnot existsを使用してこれを行うことができます:

select distinct b.idb, 
    b.name 
from basic_table b 
left join second_table s on b.idb = s.idb 
    and s.second = 'yellow' 
where s.idb is null; 
+0

感謝を:

select idb, name from basic_table b where not exists ( select 1 from second_table s where b.idb = s.idb and s.second = 'yellow' ); 

参加左使用。最初のクエリは機能しますが、2番目のクエリは機能しません(最初の行はまだ表示されています)。 – Ivan

関連する問題