You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询问题:如何获取col1中对应col2含10、20、30值的记录?

解决方法:筛选对应col2包含多个值的col1记录

首先得明确为什么用AND会返回空结果:单条记录的col2只能是一个值,你写的col2 = 10 AND col2 = 20 AND col2 = 30要求同一条记录同时满足三个值,这显然不可能,所以自然返回空集。

下面给你两种常用的正确实现方式:

方法1:分组筛选(最常用)

通过GROUP BY按col1分组,再用HAVING子句确保分组内包含所有目标col2值:

只获取符合条件的col1

SELECT col1
FROM your_table
WHERE col2 IN ('10', '20', '30') -- 先过滤掉无关记录,提升查询效率
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 3; -- 确保三个值都存在(用DISTINCT避免col2重复计数)

获取所有符合条件的完整记录

如果需要返回这些col1对应的所有原始记录,可以用子查询关联原表:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT col1
    FROM your_table
    WHERE col2 IN ('10', '20', '30')
    GROUP BY col1
    HAVING COUNT(DISTINCT col2) = 3
) qualified_col1 ON t.col1 = qualified_col1.col1;

方法2:多EXISTS子查询(更直观的存在性检查)

用多个EXISTS子句分别验证每个目标值是否存在于同一个col1组中:

SELECT DISTINCT t.*
FROM your_table t
WHERE EXISTS (
    SELECT 1 FROM your_table 
    WHERE col1 = t.col1 AND col2 = '10'
)
AND EXISTS (
    SELECT 1 FROM your_table 
    WHERE col1 = t.col1 AND col2 = '20'
)
AND EXISTS (
    SELECT 1 FROM your_table 
    WHERE col1 = t.col1 AND col2 = '30'
);

这种方法不需要分组,适合逻辑清晰化的场景,即使col2有重复值也不影响结果。

注意事项

  • 如果col2是数字类型,记得去掉值的引号(比如写成col2 = 10而不是col2 = '10');
  • 你的数据里有a 05,如果col2是数字类型,05会被存储为5,要注意数据类型的一致性哦。

内容的提问来源于stack exchange,提问作者Fshamri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:25:13