Table: Dummy
|Colum1 | Colum2 |
|:------|:-------|
| 219 | 217 |
| 219 | 218 |
| 228 | 218 |
| 228 | 225 |
| 229 | 218 |
| 229 | 220 |
我需要结果集,其中如果用户在 where 子句中提供的数字应该与其计数示例完全匹配。如果用户发送 where ( 217,218 ) 那么它应该返回,colum1 的值为 219。
以下查询返回的结果集如下。
SELECT *
from Dummy
GROUP BY Colum1
having count(distinct Colum2 ) = 2 and Colum2 in (217, 218);
| 219 | 217 |
| 228 | 218 |
| 229 | 218 |
所需输出:
| 219 | 217 |
不同的Colum2的编号是动态的,可以是2、3、4或5。
基于 @用户1191247 https://stackoverflow.com/users/1191247/user1191247's answer https://stackoverflow.com/a/76070967/1312382并假设您想要获取包含 column2 值列表的那些组exactly价值{217, 218}
(不少,不少)then以下查询可以为您提供所需的结果:
SELECT d1.colum1
FROM dummy d1 JOIN dummy d2 ON d1.colum1 = d2.colum1
WHERE d1.colum2 in (217, 218)
GROUP BY d1.colum1
HAVING COUNT(DISTINCT d1.colum2) = 2 AND COUNT(DISTINCT d2.colum2) = 2;
基本思想是:自连接确保我们有column2重复,然后我们可以过滤掉其中一个重复列中所有不需要的值,但将它们保留在另一列中。如果所有想要的值都存在,则filtered列需要等于这些值的数量 - 以及未过滤的列需要相似,否则会存在剩余值(请注意,后者的计数会更大;但它永远不会变小)。
查看user1191247的修改fiddle https://dbfiddle.uk/G3_O1tUb(仅调整两个值的查询)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)