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

多条件SQL查询需求:筛选同时关联int2=4与int2=5的int1值

解决SQL多条件关联筛选问题:找出同时关联int2=4和5的int1

没问题,这是个很常见的多值匹配筛选场景,我给你几种靠谱的解法,都能得到你想要的int1=1、2的结果,排除只关联了其中一个值的int1=3。

先确认下你的数据表(假设表名叫your_table):

int1int2
14
15
16
24
25
34
36

解法1:GROUP BY + HAVING(最直观通用)

这是处理这类“同一主键需满足多个关联条件”问题的经典写法,通过分组后统计匹配的条件数量来筛选:

SELECT int1
FROM your_table
WHERE int2 IN (4, 5)  -- 先过滤出包含目标值的行,提升效率
GROUP BY int1
HAVING COUNT(DISTINCT int2) = 2;  -- 确保int1同时关联了4和5两个值

解释:

  • WHERE int2 IN (4,5) 先把无关的行(比如int2=6)过滤掉,减少分组计算的数据量;
  • GROUP BY int1 按int1分组,把同一个int1的所有行聚合在一起;
  • HAVING COUNT(DISTINCT int2) = 2 统计每个分组里不同的int2值数量,等于2就说明这个int1同时有4和5的关联记录。

解法2:自连接(适合需要返回更多字段的场景)

如果之后需要同时返回int1对应的其他关联数据,自连接也是个不错的选择:

SELECT DISTINCT t1.int1
FROM your_table t1
JOIN your_table t2 ON t1.int1 = t2.int1
WHERE t1.int2 = 4 AND t2.int2 = 5;

解释:

  • 把表自身连接,让t1表匹配int2=4的行,t2表匹配int2=5的行;
  • 通过ON t1.int1 = t2.int1确保两个行属于同一个int1;
  • DISTINCT用来去重,避免同一个int1因为有多条匹配行而重复出现。

解法3:EXISTS子查询(逻辑清晰,适合复杂条件扩展)

如果之后要加更多筛选条件,EXISTS的写法可读性会更好:

SELECT DISTINCT int1
FROM your_table t
WHERE EXISTS (
    SELECT 1 FROM your_table 
    WHERE int1 = t.int1 AND int2 = 4
)
AND EXISTS (
    SELECT 1 FROM your_table 
    WHERE int1 = t.int1 AND int2 = 5
);

解释:

  • 外层查询遍历每个int1,通过两个EXISTS子查询分别检查:这个int1是否存在int2=4的记录,同时是否存在int2=5的记录;
  • 只有两个条件都满足的int1才会被选中,逻辑非常直白。

这三种方法都能得到你想要的结果:int1=1和2,排除int1=3。如果你的数据量很大,GROUP BY的写法通常效率会更高一些,因为它的过滤和聚合步骤更紧凑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:58:05