SQL在何处,但匹配所有
我一直在网上搜索,所以找不到这个问题的直接答案-这似乎是非常明显的事情,但我没有运气 我有一个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
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所说,一个字段/列如何与给定类别中的多个匹配?