1. ホーム
  2. sql

[解決済み] どのようにSQLでサブセットクエリを作成するには?

2022-02-11 16:05:02

質問内容

以下のような2つのテーブルがあります。

CREATE List (
    id   INTEGER,
    type INTEGER REFERENCES Types(id),
    data TEXT,
    PRIMARY_KEY(id, type)
);

CREATE Types (
    id   INTEGER PRIMARY KEY,
    name TEXT
);

のすべてのidを決定するクエリを作成したいと思います。 List で、与えられた型文字列を持つ。

例えば

リスト
1 0 "いくつかのテキスト"。
1 1 "もっとテキストを"
2 0 "フー"
3 1 "バー"
3 2 "バーバズ"
4 0 "バズ"
4 1 "FooBar"。
4 2 "FooBarBaz"。

タイプ
0 "キー1"。
1 "Key2"。
2 "Key3"。

入力 "Key1", "Key2" がある場合、クエリは 1, 4 を返す必要があります。

入力が "Key2", "Key3" である場合、クエリは 3, 4 を返す必要があります。

入力が "Key2" である場合、クエリは 1, 3, 4 を返す必要があります。

ありがとうございます。

解決方法は?

select distinct l.id 
from list l
inner join types t on t.id = l.type
where t.name in ('key1', 'key2')
group by l.id
having count(distinct t.id) = 2

where節に入れるキーの数に合わせてhaving節を調整する必要があります。キーが1つだけの場合の例

select distinct l.id 
from list l
inner join types t on t.id = l.type
where t.name in ('key2')
group by l.id
having count(distinct t.id) = 1

SQlFiddleの例