MySQL数据查询需求:提取同一ID下同String不同Var的记录
没问题,我来帮你搞定这个SQL查询的问题!
提取同一ID对应相同String但不同Var的记录
问题背景
你需要从数据表中筛选出同一id对应的string值完全相同,但var值存在差异的所有记录,目标结果是id=1的两条记录(它们的id和string一致,var分别为ab、ac),而id=2的两条记录因为string不同,所以需要排除。
正确的MySQL查询语句
SELECT t.id, t.string, t.var FROM your_table t INNER JOIN ( -- 先筛选出存在多个不同var的(id, string)组合 SELECT id, string FROM your_table GROUP BY id, string HAVING COUNT(DISTINCT var) > 1 ) AS valid_groups ON t.id = valid_groups.id AND t.string = valid_groups.string;
原语句的问题分析
你之前写的SELECT id, string, var FROM table WHERE string>1 GROUP BY id;有几个明显的逻辑错误:
WHERE string>1是把字符串类型的string当作数值比较,这完全不符合你的需求,这个条件没有任何实际意义GROUP BY id会让MySQL(如果关闭ONLY_FULL_GROUP_BY)只返回每个id的一条随机记录,开启该模式的话会直接报错,根本无法保留多条符合条件的var记录
思路拆解
- 子查询阶段:我们先按
id和string的组合分组,用COUNT(DISTINCT var) > 1来识别那些同一(id, string)下有多个不同var值的有效分组 - 主查询阶段:通过内连接把原表中属于这些有效分组的所有记录都拉出来,这样就精准得到了你需要的所有符合条件的行
内容的提问来源于stack exchange,提问作者Roy1245
相关产品推荐
相关产品推荐

