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

MySQL查询需求:筛选id_sector=1的行并返回对应同组所有数据

解决方案:筛选同组的所有记录

咱们先理清楚核心需求:你要的是所有和id_sector=1的行同组的记录——不管这些记录自身的id_sector是不是1。核心思路就是先找到id_sector=1对应的所有id_group值,再把这些组的所有记录捞出来。下面给你两种实用的实现方式:

方法一:IN子句 + 子查询(最直观易懂)

这种写法逻辑清晰,适合大多数中小数据量的场景:

SELECT * 
FROM `test` 
WHERE `id_group` IN (
    -- 先筛选出id_sector=1的行对应的唯一组ID
    SELECT DISTINCT `id_group` 
    FROM `test` 
    WHERE `id_sector` = 1
);

逻辑拆解:

  1. 内层子查询会返回2、3、5这三个组ID(用DISTINCT避免重复的组值,减少外层查询的匹配次数);
  2. 外层查询直接返回所有id_group属于这个集合的行,自然就包含了目标组的所有记录。

方法二:自连接(大数据量更友好)

如果你的表数据量较大,自连接的性能表现通常优于子查询,写法如下:

SELECT DISTINCT t.* 
FROM `test` t
-- 将表与自身关联,关联条件是组ID相同
JOIN `test` t_sector1 ON t.`id_group` = t_sector1.`id_group`
-- 只保留关联到id_sector=1的记录的行
WHERE t_sector1.`id_sector` = 1;

逻辑拆解:

  1. 通过自连接,把每个记录和同组的所有记录建立关联;
  2. 筛选出那些关联到id_sector=1的记录的行,最后用DISTINCT去除重复结果(因为同一个组可能有多个id_sector=1的行,会导致重复匹配)。

验证结果

根据你提供的测试数据,最终返回的行应该是:

id_locationid_sectorid_group
112
212
313
433
725
815

既包含了id_sector=1的原始记录,也补上了同组的其他行,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:30:47