SQL 有计数 - 不工作

标签 sql

我有一个标签表。该表中与此问题相关的行是:tag_id 和 taggable_id。我想选择一个包含所有 tag_id 的 taggable_id。 但是这个查询是空的:

SELECT taggable_id, 
       tag_id 
FROM   taggings 
WHERE  tag_id IN( 73, 76 ) 
       AND taggable_id = 3238 
GROUP  BY tag_id 
HAVING Count(tag_id) = 2

现在,当我使用不带计数的查询时,我得到 2 行结果:

SELECT taggable_id, 
       tag_id 
FROM   taggings 
WHERE  tag_id IN( 73, 76 ) 
       AND taggable_id = 3238 

为什么?

最佳答案

您需要更改 GROUP BY 列以按 taggable_id 分组,并且您需要更改 having 子句以计算不同的 tag_id:

SELECT taggable_id
FROM   taggings 
WHERE  tag_id IN( 73, 76 ) 
GROUP  BY taggable_id 
HAVING Count(DISTINCT tag_id) = 2

参见 SQL Fiddle with Demo .这种类型的查询称为 relational division .

您当前的查询无效,因为您按 tag_id 而不是 taggable_id 分组。

关于SQL 有计数 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811132/

相关文章:

SQL 外键数组引用非数组

php - 在用户表中对一组用户进行排序

mysql - 使用ExtractValue()函数将XML数据插入MySQL的表中

sql - 如何在SQL Server 2014中检查事件事务?

sql - 日期和按日期排序的postgresql案例

php - 使用 join (codeigniter) 从单个字段中检索并打印逗号分隔符后的值

mysql - 我可以在不使用索引的情况下优化这样的 MySQL 查询吗?

mysql - 合并来自一个表的计数和不同于另一个表的计数

mysql - STR_TO_DATE 返回不正确的小时值

sql - 如何在sqlplus(Oracle)中完成一个CREATE TYPE的输入?