これはあなたのために働くはずです:
SELECT DISTINCT t1.`key`
FROM table1 t1
WHERE t1.value in('A', 'B')
GROUP BY t1.`key`
HAVING COUNT(t1.value) = (SELECT COUNT(t2.value)
FROM Table1 t2
WHERE t1.`key` = t2.`key`)
これはキーのみを返します。
- 持っ
A
ているB
だけで、他に何もkey = 500
ないので、返されるべきではありません。しかしkey = 100
、含まれている必要があります。
- のみを持ってい
A
ます。のようにkey = 300
。
- has only
B
soは、 which iskey = 600
よりも 1 つ多い値が含まれているため、返されるべきではありません。しかし、含まれている必要があります。B
w
key = 400
更新:これはどのように機能していますか
キーに値がある場合IN('A', 'B')
、他の値も含まれる可能性があります。
HAVING
そのため、次の句を追加しました。
HAVING COUNT(t1.value) = (SELECT COUNT(t2.value)
FROM Table1 t2
WHERE t1.`key` = t2.`key`)
各値について、相関サブクエリを使用して、同じキーの値COUNT(t1.value)
の合計と比較されます。したがって、現在のキーにそれ以外の値が含まれている場合、 は同じキーのすべての値と等しくなりません。たとえば、キー = 500 にはカウント = 3 がありますが、次を使用します。COUNT
SELECT COUNT(t2.value) FROM Table1 t2 WHERE t1.key = t2.key
t1.value
'A', 'B'
COUNT(t1.value)
COUNT
SELECT DISTINCT t1.`key`
FROM table1 t1
WHERE t1.value in('A', 'B')
GROUP BY t1.`key`
どちらかまたは「B」があるため、節がないHAVING
場合も含まれます。A'
しかし、HAVING
count = 3 が 2 と等しくないため、句はこのキーを削除します。