私はこの問題に出くわしたSQLにかなり慣れていません:私は人が力を持つ関係テーブルを持っています
A has X
A has Z
B has X
B has Y
C has Y
D has Z
この場合は B である、力 X と Y を持つすべての人を選択したいと思います。もちろん、より複雑な力の組み合わせがあります。
このようなことをして、
SELECT person
FROM tableName
WHERE power IN ('x', 'y')
GROUP BY Person
HAVING COUNT(*) = 2
一意の制約がpower
すべての人に適用されていない場合は、使用する必要がありますDISTINCT
SELECT person
FROM tableName
WHERE power IN ('x', 'y')
GROUP BY Person
HAVING COUNT(DISTINCT power) = 2
これは関係分割と呼ばれます。これを行う 1 つの方法を次に示します。
SELECT person
FROM Powers
WHERE power IN ('x', 'y')
GROUP BY person
HAVING COUNT(power) = 2