MySQL:如果某些列包含some_id X

时间:2016-11-26 09:41:18

标签: mysql

Heey all,我正在努力解决一些非常简单的问题,但我无法找到正确的查询。

我有这张桌子

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的记录都没有" value_c"在col_b

所以在这种情况下我想得到以下结果集

col_a
-----
2
3

因为col_b有一个" value_c"其中col_a = 1(记录id:3)

所以基本上我对col_a的id不感兴趣,如果任何带有该id的记录包含" value_c"在col_b

我希望很清楚

已提前感谢!!

1 个答案:

答案 0 :(得分: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