MySQL:如果某些列包含 some_id X 的值,则排除

标签 mysql

嘿大家,我正在努力解决一些非常简单的问题,但我找不到正确的查询。

我有这张 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/

相关文章:

php - Laravel HasManyThrough 与 3 向数据透视表

mysql - 在 Windows 中更改默认的 MySQL 用户

mysql UNION ALL、ORDER BY、LIMIT 和 INNER JOIN

mysql - 在 union select mysql 中使用月份名称而不是数字

接受参数中具有多个值的字符串的MySQL存储过程

php - 带有 mysql 变量的 Mysqli 准备语句

mysql - 如何使用 Windows 访问硬盘上的 MySQL 文件

php - 使用 PHP 和 MySQL 验证 Android 登录

mysql - 返回距当前日期一年多以前的日期的 SQL 查询

python - 使用 MySQL 时,Django IntegerField 将 0 作为 None 值检索