如果我有一张类似于以下内容的表格:
MyIds MyValues
----- --------
1 Meat
1 Fruit
1 Veggies
2 Fruit
2 Meat
3 Meat
如何创建一个查询,如果我获得了一个不同的MyValues
的任意列表,它将为我提供与{{全部相匹配的所有MyIds
1}}。
示例:如果MyValues
的列表包含[肉类,水果,蔬菜],我希望MyValues
的{{1}}返回,因为MyIds
有一个条目MyValues中每个值的表。
我知道如果给出1
的特定列表,可以使用INTERSECT完成此操作。但我不知道如何使用任意数量的1
答案 0 :(得分:3)
您需要计算满足条件的每个MyID
的实例总数,并且它与IN
子句中提供的值的数量匹配。
SELECT MyID
FROM tableName
WHERE MyValues IN ('Meat', 'Fruit', 'Veggies')
GROUP BY MyID
HAVING COUNT(DISTINCT myVAlues) = 3
答案 1 :(得分:0)
一个很大的问题是如何表示清单。以下给出了一种方法,表示表中的列表:
with l as (
select 'Meat' as el union all
select 'Fruit' union all
select 'Veggies'
)
select MyId
from t join
l
on t.MyValues = l.el
group by MyId
having count(distinct t.myvalues) = (select count(*) from l)