嘿大家,我正在努力解决一些非常简单的问题,但我找不到正确的查询。
我有这张 table
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)
所以我基本上对 col_a 的 id 不感兴趣,如果该 id 的任何记录在 col_b 中包含“value_c”
希望一切都清楚
已经提前感谢了!!
最佳答案
“教科书式解决方案”可能是使用 不存在
运算符:
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
关于MySQL:如果某些列包含 some_id X 的值,则排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816933/