2016-11-26 4 views
0

Heeyすべて、私は非常に単純なことに苦労していますが、正しいクエリを見つけることはできません。MySQL:some_idの値がいくつかの列に含まれている場合は除外してください。X

私は、このテーブルに持って

私が欲しいのはcol_aがsome_idあるレコードのどれも私が欲しい場合には

のでcol_bには「value_c」を持っていないcol_aからすべての個別の値である

id | col_a | col_b 
----------------- 
1 | 1 | value_a 
2 | 1 | value_b 
3 | 1 | value_c 
4 | 2 | value_a 
5 | 2 | value_b 
6 | 3 | value_a 
7 | 3 | value_b 

:col_bはcol_a = 1(3レコードID) "value_c" を持っているので、結果セット

col_a 
----- 
2 
3 

を取得するには、次のそのIDを持つすべてのレコードが、私は事前にの明確すでに

感謝を願っていますcol_b

で「value_c」が含まれている場合ので、私はbasicly私はcol_aのIDで興味がない

!!

答えて

0

「教科書ソリューションは、」おそらくnot exists演算子を使用することです:

SELECT DISTINCT col_a 
FROM mytable a 
WHERE NOT EXISTS (SELECT * 
        FROM mytable b 
        WHERE a.col_a = b.col_a AND col_b = 'value_c') 

をしかし、私はvalue_cインスタンスをグループ化してカウントすることは少しよりエレガントであろうと思う:

SELECT col_a 
FROM  mytbale 
GROUP BY col_a 
HAVING COUNT(CASE col_b WHEN 'value_c' THEN 1 END) = 0 
+0

ありがとう! !私は2番目がよりエレガントであることに同意します。私は少しの違いにも気づいた。 2番目の値にはNULL値も含まれ、最初の値はNULL値ではありません。 –

関連する問題