これはあなたのために働くはずです:
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
Bsoは、 which iskey = 600よりも 1 つ多い値が含まれているため、返されるべきではありません。しかし、含まれている必要があります。Bwkey = 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 がありますが、次を使用します。COUNTSELECT COUNT(t2.value) FROM Table1 t2 WHERE t1.key = t2.keyt1.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'しかし、HAVINGcount = 3 が 2 と等しくないため、句はこのキーを削除します。