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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:33:59