2016-11-26 84 views
0

Heey all,我正在努力解決一些非常簡單的問題,但我找不到正確的查詢。MySQL:如果某些列包含some_id的值,則排除X X

我有這個表

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_a其中沒有的記錄,其中爲col_a是SOME_ID在col_b沒有「value_c」

所以我想情況下,所有不同的值得到以下結果集

col_a 
----- 
2 
3 

因爲col_b具有 「value_c」,其中爲col_a = 1(記錄ID:3)

所以我basicly我不感興趣,在爲col_a的ID,如果與該ID的任何記錄包括col_b

「value_c」我希望的明確

已經在此先感謝!

回答

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

謝謝! !我同意第二個更優雅。我注意到也有輕微的差異。第二個也包含NULL值,第一個不包含NULL值。 –

相關問題