这应该适合你:
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
Bsokey = 600不应该返回,因为它包含的值比Bis多一个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)的总和进行比较。因此,如果当前键包含的值不是那么将不等于同一键的所有值。例如 key = 500 有一个 count = 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`
没有该HAVING子句也将包括它,因为它具有A'或“B”。但是该HAVING子句消除了这个键,因为它的计数 = 3 不等于 2。