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

SQL JOIN查询需仅显示一行:同user_id多数据关联去重问题咨询

解决关联查询重复行的问题

我来帮你搞定这个重复行的困扰!问题出在FL_Form_A1表中同一个user_id存在多条记录,当你用左连接关联时,每条FL_Form_A1的记录都会和FL_AmmendmentDetails的对应记录匹配,自然就输出了多行结果。下面给你几种实用的解决方案,你可以根据实际情况选择:

方案1:用DISTINCT快速去重

如果FL_Form_A1中同一user_id的两条记录所有字段值都完全相同,直接在查询开头加DISTINCT就能一键去除重复行:

SELECT DISTINCT FA.App_Name, FLA.ammendment_status, FA.App_Concern, FA.Respo_Mob, FLA.RegNo, FA.user_id
FROM FL_AmmendmentDetails AS FLA
LEFT JOIN FL_Form_A1 AS FA ON FA.user_id = FLA.user_id
WHERE FLA.RegNo='FE19-2006329'

方案2:分组聚合取指定版本记录

如果同一user_id的FL_Form_A1记录有字段差异,但你只需要保留其中一个版本(比如取最新的、最大的字段值),可以用聚合函数配合分组实现:

SELECT 
    MAX(FA.App_Name) AS App_Name, 
    FLA.ammendment_status, 
    MAX(FA.App_Concern) AS App_Concern, 
    MAX(FA.Respo_Mob) AS Respo_Mob, 
    FLA.RegNo, 
    FA.user_id
FROM FL_AmmendmentDetails AS FLA
LEFT JOIN FL_Form_A1 AS FA ON FA.user_id = FLA.user_id
WHERE FLA.RegNo='FE19-2006329'
GROUP BY FLA.ammendment_status, FLA.RegNo, FA.user_id

注意:GROUP BY后面必须包含所有没有用聚合函数包裹的字段。如果表中有时间字段(比如记录创建时间),可以把MAX()换成对应时间字段的聚合,确保取到最新的那条记录。

方案3:用窗口函数精准控制取行

如果需要精确指定取FL_Form_A1中同一user_id的某一行(比如第一条、最新一条),窗口函数ROW_NUMBER()是最灵活的选择:

WITH RankedFA AS (
    SELECT 
        *, 
        -- 按user_id分组编号;如果有排序字段(比如create_time),可以替换(SELECT NULL)实现按规则排序
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY (SELECT NULL)) AS rn
    FROM FL_Form_A1
)
SELECT FA.App_Name, FLA.ammendment_status, FA.App_Concern, FA.Respo_Mob, FLA.RegNo, FA.user_id
FROM FL_AmmendmentDetails AS FLA
LEFT JOIN RankedFA AS FA ON FA.user_id = FLA.user_id AND FA.rn = 1
WHERE FLA.RegNo='FE19-2006329'

要是想取最新的记录,把ORDER BY (SELECT NULL)改成ORDER BY create_time DESC即可,这样rn=1就对应最新的那条数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:49:09