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

SQL内连接查询出现重复记录,如何实现去重?

解决INNER JOIN查询结果重复的问题

首先注意你的SQL语句里有个笔误:RTU+SCAN.B1_NAME应该是RTU_SCAN.B1_NAME,这个拼写错误会导致关联逻辑出错,先修正这个基础问题。

查询结果重复48次,本质是RTU_SCAN表中存在多条与ABS_LIMIT表同一条记录匹配的B1_NAME记录,关联后每条匹配项都会被返回,因此产生重复。以下是几种去重方案:

方案1:用DISTINCT过滤完全重复记录

直接在SELECT后添加DISTINCT关键字,数据库会自动过滤掉所有字段完全相同的重复行:

SELECT DISTINCT
    ABS_LIMIT.B1_NAME, ABS_LIMIT.B2_NAME, ABS_LIMIT.B3_NAME, ABS_LIMIT.ELEM_NAME 
FROM 
    ABS_LIMIT
INNER JOIN 
    RTU_SCAN ON RTU_SCAN.B1_NAME = ABS_LIMIT.B1_NAME
WHERE 
    ABS_LIMIT.B3_NAME LIKE 'AMP%';

方案2:用GROUP BY分组去重

如果需要后续扩展聚合操作(比如统计匹配次数),或者想明确指定分组规则,可以用GROUP BY,将SELECT中的所有非聚合字段都放入GROUP BY子句:

SELECT 
    ABS_LIMIT.B1_NAME, ABS_LIMIT.B2_NAME, ABS_LIMIT.B3_NAME, ABS_LIMIT.ELEM_NAME 
FROM 
    ABS_LIMIT
INNER JOIN 
    RTU_SCAN ON RTU_SCAN.B1_NAME = ABS_LIMIT.B1_NAME
WHERE 
    ABS_LIMIT.B3_NAME LIKE 'AMP%'
GROUP BY 
    ABS_LIMIT.B1_NAME, ABS_LIMIT.B2_NAME, ABS_LIMIT.B3_NAME, ABS_LIMIT.ELEM_NAME;

方案3:先对关联表去重再JOIN

如果RTU_SCAN表本身就存在重复的B1_NAME记录,可以先对该表做去重处理,再和ABS_LIMIT关联,从根源减少重复匹配:

SELECT 
    ABS_LIMIT.B1_NAME, ABS_LIMIT.B2_NAME, ABS_LIMIT.B3_NAME, ABS_LIMIT.ELEM_NAME 
FROM 
    ABS_LIMIT
INNER JOIN 
    (SELECT DISTINCT B1_NAME FROM RTU_SCAN) AS RTU_SCAN_UNIQUE 
    ON RTU_SCAN_UNIQUE.B1_NAME = ABS_LIMIT.B1_NAME
WHERE 
    ABS_LIMIT.B3_NAME LIKE 'AMP%';

额外提示

如果用上述方法后仍有重复,大概率是看似相同的字段存在细微差异(比如首尾空格、大小写不一致),可以用TRIM()函数去除空格,或者用UPPER()/LOWER()统一大小写后再匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:35:21