sql - MySQL:如何选择具有特定值的组?

标签 sql mysql group-by having

说有这样的表:

mysql> SELECT * FROM tags;
+---------+--------+
| post_id | tag_id |
+---------+--------+
|       1 |      2 |
|       1 |      3 |
|       1 |      1 |
|       2 |      1 |
|       2 |      2 |
+---------+--------+
5 rows in set (0.00 sec)


字段名称很容易解释。我想选择同时具有1和3个post_idtag_id,因此在此示例中,它仅是1。我想到了类似的东西
SELECT post_id FROM tags GROUP BY post_id HAVING ...在我想列出该组中存在的tag_id后。我怎么做?

最佳答案

如果没有任何唯一约束,请尝试:

SELECT post_id 
FROM tags 
WHERE tag_id = 1 OR tag_id = 3 
GROUP BY post_id 
HAVING count(DISTINCT tag_id) = 2;


或者,如果尝试仅检测两个HAVING值,请使用此tag_id子句:

HAVING MIN(tag_id) <> MAX(tag_id)


如果post_id和tag_id都具有唯一约束,那么这也应该起作用:

SELECT post_id 
FROM tags 
WHERE tag_id = 1 OR tag_id = 3 
GROUP BY post_id 
HAVING count(*) = 2;

关于sql - MySQL:如何选择具有特定值的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724561/

相关文章:

sql - 不同模式中的触发器

mysql - 将两个查询合并为一个

mysql - 如何在MySQL中使用group by和pivot?

MySQL - 跨多行和 2 列获取唯一 ID - GROUP BY 几乎让我到达那里

mysql - MySQL 上的 GROUP BY

php - 带有插入/更新的 html/php/sql 表单

sql - 如何避免在 MongoDB(使用 Mongoid)或 ActiveRecord(使用 MySQL 的 Rails)中插入两次相同的记录?

MySQL 检索 friend 的 friend 结构和性能

PHP MySQL 选择随机行

MySQL MONTHNAME() 来自数字