SQL查询需求:获取同时存在Col2为aaa和bbb的唯一Col1值
解决SQL中获取同时包含多个值的唯一列值问题
嘿,刚入门SQL遇到这种需求很正常,我给你几种简单易懂的方案,都能帮你拿到想要的结果~
你的需求是:找出Col1的唯一值,要求对应的Col2中同时包含"aaa"和"bbb"。针对这个需求,这里有三种常用方法:
方法1:GROUP BY + HAVING(最直观的分组统计法)
这是处理这类“同时满足多个条件”分组需求的经典写法,逻辑清晰,适合新手理解:
SELECT Col1 FROM your_table_name WHERE Col2 IN ('aaa', 'bbb') -- 先过滤无关行,提升效率 GROUP BY Col1 HAVING COUNT(DISTINCT Col2) = 2;
逻辑解释:
WHERE子句先筛选出Col2是"aaa"或"bbb"的行,减少后续分组的计算量;- 按
Col1分组后,COUNT(DISTINCT Col2)会统计每个Col1下不同的目标值数量; - 只有当数量等于2时,说明这个
Col1同时拥有"aaa"和"bbb",才会被保留。
方法2:自连接法(适合理解表连接逻辑)
如果刚学表连接,这种写法能帮你更好理解关联查询的逻辑:
SELECT DISTINCT t1.Col1 FROM your_table_name t1 JOIN your_table_name t2 ON t1.Col1 = t2.Col1 WHERE t1.Col2 = 'aaa' AND t2.Col2 = 'bbb';
逻辑解释:
把同一个表当成两个独立的表t1和t2,通过Col1关联起来,找到那些在t1中是"aaa"、同时在t2中是"bbb"的同一个Col1,最后用DISTINCT去重(避免重复结果)。
方法3:EXISTS子查询法(大数据量下效率更优)
如果你的表数据量比较大,这种方法的查询效率通常会更高:
SELECT DISTINCT Col1 FROM your_table_name t WHERE EXISTS ( SELECT 1 FROM your_table_name WHERE Col1 = t.Col1 AND Col2 = 'aaa' ) AND EXISTS ( SELECT 1 FROM your_table_name WHERE Col1 = t.Col1 AND Col2 = 'bbb' );
逻辑解释:
对每一行的Col1,分别检查是否存在对应的"aaa"记录和"bbb"记录,只有两个条件都满足时,这个Col1才会被选中。
验证结果
以上三种方法都会返回你期望的结果:
| Col1 |
|---|
| 1 |
| 3 |
记得把代码中的your_table_name替换成你实际的表名哦~
内容的提问来源于stack exchange,提问作者dns
相关产品推荐
相关产品推荐

