2012-10-24 65 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)