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

Left Join左连接查询去重:如何修改SQL语句避免返回重复记录

问题原因

左连接产生重复记录的核心原因是msis2表中存在多条MSISDN字段值相同的记录,当msis1和msis2按MSISDN关联时,msis1的单条记录会匹配msis2中所有同MSISDN的记录,最终输出多条重复结果。


解决方案

根据实际业务需求可以选择以下两种方案:

方案1:直接对查询结果去重

如果只要结果无重复、不需要指定多匹配行时msis2.c的取值规则,可以直接加DISTINCT关键字:

SELECT DISTINCT msis1.msisdn, msis1.a, msis2.c 
FROM msis1 
LEFT JOIN msis2 ON msis1.msisdn = msis2.msisdn;

方案2:先对右表去重再关联

如果需要明确指定多匹配行时msis2.c的取值规则(比如取最大值、最小值、最新记录对应的值),可以先对msis2按MSISDN分组处理后再关联:
示例:取每个MSISDN对应的最大c值

SELECT msis1.msisdn, msis1.a, t.c
FROM msis1
LEFT JOIN (
    SELECT msisdn, MAX(c) AS c
    FROM msis2
    GROUP BY msisdn
) t ON msis1.msisdn = t.msisdn;

如果需要取完整行的指定记录,可以用窗口函数筛选每个MSISDN下的第一条记录:

SELECT msis1.msisdn, msis1.a, t.c
FROM msis1
LEFT JOIN (
    SELECT 
        msisdn, 
        c,
        ROW_NUMBER() OVER (PARTITION BY msisdn ORDER BY 排序字段 DESC) AS rn
    FROM msis2
) t ON msis1.msisdn = t.msisdn AND t.rn = 1;

把代码里的排序字段替换为你用来判断优先级的字段即可,比如时间字段等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:08