SQL查询技巧:筛选指定列仅包含特定值的行——获取所有child字段值均为200的id列表
筛选仅关联child=200的id的SQL解决方案
嗨,我来帮你搞定这个需求!我们的目标是从identities表中找出那些所有关联记录的child字段值都只有200的id——也就是说这个id对应的每一条记录里child都不能是其他数值。
方法一:使用GROUP BY + HAVING子句
这是最直接的分组筛选方式,通过分组后聚合条件来精准判断:
SELECT id FROM identities GROUP BY id HAVING COUNT(DISTINCT child) = 1 AND MAX(child) = 200;
思路拆解:
GROUP BY id:把同一个id的所有记录归为一组COUNT(DISTINCT child) = 1:确保这个id对应的child值只有唯一的一种MAX(child) = 200:进一步限定这个唯一的child值必须是200
方法二:反向排除法(子查询)
如果觉得分组的方式不太直观,也可以用反向排除的思路:先找出所有存在非200child值的id,再把这些id排除掉,剩下的就是符合要求的:
SELECT DISTINCT id FROM identities WHERE id NOT IN ( SELECT DISTINCT id FROM identities WHERE child != 200 );
思路拆解:
- 子查询
SELECT DISTINCT id FROM identities WHERE child != 200:找出所有至少有一条记录child不是200的id - 主查询筛选出不在上述列表中的id,这些id的所有记录child必然都是200
结果验证
针对你给出的表数据:
- id=1有child=200和700,会被两种方法排除
- id=2的两条记录child都是200,会被选中
- id=3有child=200和400,也会被排除
最终结果正好是id=2,完全符合你的预期。
内容的提问来源于stack exchange,提问作者whd.nsr
相关产品推荐
相关产品推荐

