1

次のようなテーブルがある場合:

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

個別の任意のリストが与えられた場合に、すべてに一致するすべてMyValuesものが得られるようにクエリを作成するにはどうすればよいですか。MyIdsMyValues

例:含まれている[肉、果物、野菜]のリストの場合、MyValuesの各値のエントリがテーブルにあるため、元に戻しMyValuesたいと思います。MyIds11

の特定のリストが与えられた場合、これはINTERSECTで実行できることを知っていますMyValues。しかし、私はそれが任意の数でどのように行われることができるかわかりませんMyValues

4

2 に答える 2

3

条件を満たし、句MyIDで指定された値の数に一致するそれぞれのインスタンスの総数をカウントする必要があります。IN

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

SQLFiddle デモ

于 2012-10-24T00:46:07.603 に答える
0

大きな問題は、リストがどのように表現されているかです。以下は、テーブル内のリストを表す 1 つのアプローチを示しています。

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)
于 2012-10-24T00:50:16.600 に答える