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

MySQL查询:如何获取关联全部指定id2值的id1记录

正确查询同时关联id2=2和id2=3的id1的SQL语句

你的原查询语句Select id1 from table where id2 in (2,3) group by id1;的问题在于,它仅筛选出关联了id2=2或id2=3的记录,分组后只要id1满足其中一个条件就会被返回,所以id1=2(仅关联id2=2)也会出现在结果里。要筛选出同时关联两个id2值的id1,有几种常用的写法:

方法1:使用HAVING COUNT(DISTINCT id2)

这是最常用的聚合筛选方式,通过统计分组后不同id2的数量来确保同时包含2和3:

SELECT id1 
FROM table 
WHERE id2 IN (2, 3) 
GROUP BY id1 
HAVING COUNT(DISTINCT id2) = 2;
  • 先通过WHERE筛选出id2为2或3的记录
  • 按id1分组后,用HAVING检查每个分组里不同id2的数量是否等于2(即同时包含2和3)

方法2:自连接查询

通过自连接匹配同时存在id2=2和id2=3的id1:

SELECT t1.id1
FROM table t1
JOIN table t2 ON t1.id1 = t2.id1
WHERE t1.id2 = 2 AND t2.id2 = 3;
  • 把表自身作为两个表t1和t2,分别筛选出id2=2和id2=3的记录
  • 通过id1关联,得到同时满足两个条件的id1

方法3:使用EXISTS子查询

先筛选出关联id2=2的id1,再检查这些id1是否存在关联id2=3的记录:

SELECT DISTINCT id1
FROM table t1
WHERE id2 = 2
AND EXISTS (
    SELECT 1 
    FROM table t2 
    WHERE t2.id1 = t1.id1 
    AND t2.id2 = 3
);
  • EXISTS子查询会快速判断当前id1是否有对应的id2=3记录,效率较高
  • 用DISTINCT避免重复返回同一个id1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:55:18