MySQL如何查询同一ID对应不同Val1值的记录?已尝试语句失效
解决SQL查询:找出同一ID下Val1值不同的重复记录
首先,你的原语句出错的核心原因是聚合函数(比如count())不能直接放在WHERE子句中——WHERE是用来筛选行级原始数据的,而聚合函数是基于分组后的数据计算的,两者的执行逻辑顺序不匹配。要实现你的需求,我给你两种实用的解决方法:
方法1:子查询筛选目标ID后关联原表
先找出那些拥有至少2个不同Val1值的ID,再从原表中提取这些ID对应的所有记录:
SELECT t1.ID, t1.Val1 FROM Table1 t1 INNER JOIN ( SELECT ID FROM Table1 GROUP BY ID HAVING COUNT(DISTINCT Val1) > 1 ) t2 ON t1.ID = t2.ID ORDER BY t1.ID, t1.Val1;
子查询里用HAVING COUNT(DISTINCT Val1) > 1精准筛选出符合条件的ID,再和原表关联就能得到你想要的结果。
方法2:使用窗口函数(适配MySQL 8+、PostgreSQL、SQL Server等现代数据库)
窗口函数可以直接在每行数据上计算对应ID的不同Val1数量,再过滤出数量大于1的行,写法更直观:
SELECT ID, Val1 FROM ( SELECT ID, Val1, COUNT(DISTINCT Val1) OVER (PARTITION BY ID) AS val_count FROM Table1 ) temp WHERE val_count > 1 ORDER BY ID, Val1;
两种方法最终都会输出你期望的结果:
ID Val1 1 AVD1R 1 ART1R 3 DER1R 3 DER1F
内容的提问来源于stack exchange,提问作者Rahul shah
相关产品推荐
相关产品推荐

