我有一个标签表。该表中与此问题相关的行是: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/