SQL在何处,但匹配所有

SQL在何处,但匹配所有,sql,Sql,我一直在网上搜索,所以找不到这个问题的直接答案-这似乎是非常明显的事情,但我没有运气 我有一个SQL查询,它有以下行: WHERE Genre IN ('Rock', 'Popular', 'Classical') 然而,这会给出一个很长的结果列表,也就是说,我想要的是匹配所有3个结果的结果 SELECT id, COUNT(*) c FROM table WHERE Genre IN ('Rock', 'Popular', 'Classical') GROUP BY id HAVING c

我一直在网上搜索,所以找不到这个问题的直接答案-这似乎是非常明显的事情,但我没有运气

我有一个SQL查询,它有以下行:

WHERE Genre IN ('Rock', 'Popular', 'Classical')
然而,这会给出一个很长的结果列表,也就是说,我想要的是匹配所有3个结果的结果

SELECT id, COUNT(*) c
FROM table
WHERE Genre IN ('Rock', 'Popular', 'Classical')
GROUP BY id
HAVING c = 3

谢谢。

这是一个集合内集合查询。我主张在having子句中使用聚合

以下是此类查询的近似值:

select id
from t
group by id
having sum(case when genre = 'Rock' then 1 else 0 end) > 0 and      -- has Rock
       sum(case when genre = 'Popular' then 1 else 0 end) > 0 and   -- has Popular
       sum(case when genre = 'Classical' then 1 else 0 end) > 0     -- has Classical

having子句看起来可能有点复杂。但每个子句只是计算与其中一个值匹配的行数。如果有,则该类型通过该测试。

这是一个集合内集合查询。我主张在having子句中使用聚合

以下是此类查询的近似值:

select id
from t
group by id
having sum(case when genre = 'Rock' then 1 else 0 end) > 0 and      -- has Rock
       sum(case when genre = 'Popular' then 1 else 0 end) > 0 and   -- has Popular
       sum(case when genre = 'Classical' then 1 else 0 end) > 0     -- has Classical

having子句看起来可能有点复杂。但每个子句只是计算与其中一个值匹配的行数。如果有的话,那么这种类型就通过了测试。

这里有一种替代方法,但我也喜欢戈登的方法:

SELECT id
FROM yourtable
WHERE genre IN ('Rock', 'Popular', 'Classical')
GROUP BY id
HAVING COUNT(DISTINCT Genre) = 3

这会计算与id关联的不同类型,只返回与所有3个类型匹配的类型。

这里有一种替代方法,但我也喜欢Gordon的方法:

SELECT id
FROM yourtable
WHERE genre IN ('Rock', 'Popular', 'Classical')
GROUP BY id
HAVING COUNT(DISTINCT Genre) = 3
SELECT id, COUNT(*) c
FROM table
WHERE Genre IN ('Rock', 'Popular', 'Classical')
GROUP BY id
HAVING c = 3
这将统计与id关联的不同类型,并仅返回与所有3个类型匹配的类型

SELECT id, COUNT(*) c
FROM table
WHERE Genre IN ('Rock', 'Popular', 'Classical')
GROUP BY id
HAVING c = 3
这假设id和Genre的组合是唯一的,它们应该在一个适当规范化的模式中


这假设id、类型的组合是唯一的,它们应该在一个正确规范化的模式中。

没有记录可以在一个字段上匹配所有3个。怎么可能呢?如果您想让我们理解这一点,您需要显示您的数据布局、一些示例数据和预期结果。正如Don Roby所说,一个字段/列如何与给定类别中的多个匹配?没有记录可以在一个字段中匹配所有3个。怎么可能呢?如果你想让我们理解这一点,你需要展示你的数据布局、一些示例数据和预期结果。正如Don Roby所说,一个字段/列如何与给定类别中的多个匹配?