我有一个标签表。该表中针对此问题的相关行是: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
为什么?
答案 0 :(得分:4)
您需要将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
进行分组。
答案 1 :(得分:0)
您确定要按tag_id分组并按tag_id本身计算吗?
看看这里:
http://www.w3schools.com/sql/sql_having.asp
SELECT Customer,SUM(OrderPrice)FROM Orders GROUP BY客户 使用SUM(OrderPrice)< 2000