0

MS SQL Server 2008 では、次のようなテーブルがあります。


CREATE TABLE SomeTable
(
   MajorID int NOT NULL REFERENCES ...,
   MinorID int NOT NULL,
   Value   int NOT NULL REFERENCES ...,
   PRIMARY KEY(MajorID, MinorID)
)

(Value0、Value1、...) のセットもあります。目標は、少なくとも 1 回リストされているセットのすべての値を持つすべての MajorID を見つけることです。このタスクでは MinorID は重要ではありません。セットのサイズは事前定義されておらず、セットはクライアント アプリケーションで生成されます。その最大サイズには妥当な制限があります (たとえば 64)。

どの SQL を使用すればよいですか?

例:

MajorID MinorID 値
      1 0 4
      1 1 1
      1 2 3
      1 3 4
      1 4 4
      1 5 5
      1 6 5

      2 0 1

      3 0 1
      3 1 4

値リスト (1, 4) の場合、答えは (1, 3) です。MajorID 1 と 3 にはそれぞれの値が少なくとも 1 回リストされているためです。

4

2 に答える 2

4

次のクエリのように、集計を使用してこれを行うことができます。

select majorid
from t
group by majorid
having COUNT(distinct value) = (select COUNT(distinct value) from t)

このhaving句は、 a のすべての値が存在することを確認しますmajorid

これはすべての値に当てはまります。値リストがある場合は、これを試してください。

with valuelist as (
      select 1 as vslue union all
      select 4
)
select majorid
from t join
     valuelist vl
     on t.value = vl.value
group by majorid
having count(distinct value) = (select count(*) from valuelist)
于 2013-04-26T13:19:38.767 に答える