2012-10-24 34 views
1

任意给定数。如果我有类似如下的表:替代相交的条件

MyIds MyValues 
----- -------- 
    1 Meat 
    1 Fruit 
    1 Veggies 
    2 Fruit 
    2 Meat 
    3 Meat 

如何创建一个查询,例如,如果我给出的不同MyValues任意列表,它会给我所有的MyIds匹配全部MyValues

举例:如果MyValues列表包含[肉类,水果,蔬菜],我想获得MyIds1的回来,因为1在表中对各MyValues值的条目。

我知道这可以用INTERSECT完成,如果我给出了一个特定的清单MyValues。但我不知道它如何可以与MyValues

+1

[关系部门](http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-所述-SQL的关系分/) –

回答

3

你需要计算满足条件的每个MyID的实例总数的任意数量的完成,那它在IN提供的价值数相匹配条款。

SELECT MyID 
FROM tableName 
WHERE MyValues IN ('Meat', 'Fruit', 'Veggies') 
GROUP BY MyID 
HAVING COUNT(DISTINCT myVAlues) = 3 

SQLFiddle Demo

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)