3

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

为什么?

4

2 回答 2

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。这种类型的查询称为关系除法

您当前的查询不工作,因为您是按tag_id而不是分组taggable_id

于 2013-04-04T12:32:11.720 回答
0

您确定要按 tag_id 分组并按 tag_id 本身计数吗?

看看这里:

http://www.w3schools.com/sql/sql_have.asp

SELECT Customer,SUM(OrderPrice) 从 Orders GROUP BY SUM(OrderPrice)<2000 的客户

于 2013-04-04T12:33:51.107 回答