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

Left Outer Join关联两表返回冗余行问题求助

解决表关联后行数过多的问题

当前使用left outer join仅通过CaseID关联时,若表1和表2中同一CaseID存在多行数据,会触发笛卡尔积,导致结果行数大幅增加(比如CaseID=114在表1有2行、表2有2行,关联后会生成4行),最终返回22行而非预期的11行。

方案一:利用同CaseID的CreatedDate唯一性去重关联

由于表2中同一CaseID对应的CreatedDate完全相同,可先对表2按CaseID和CreatedDate去重,再与表1左连接:

SELECT t1.Id, t1.Name, t1.CaseID, t2.CreatedDate
FROM table1 t1
LEFT JOIN (
    SELECT DISTINCT CaseID, CreatedDate
    FROM table2
) t2 ON t1.CaseID = t2.CaseID;

该方案直接消除表2中CaseID的重复行,确保表1每行仅匹配一行数据,完美贴合预期结果。

方案二:按行号一一对应关联(适用于同CaseID存在不同CreatedDate的场景)

如果后续表2中同一CaseID可能出现不同CreatedDate,需要让表1和表2的同CaseID行按顺序一一匹配,可使用窗口函数生成行号后关联:

WITH Table1_Ranked AS (
    SELECT 
        Id, Name, CaseID,
        ROW_NUMBER() OVER (PARTITION BY CaseID ORDER BY Id) AS rn
    FROM table1
),
Table2_Ranked AS (
    SELECT 
        CaseID, CreatedDate,
        ROW_NUMBER() OVER (PARTITION BY CaseID ORDER BY T2Id) AS rn
    FROM table2
)
SELECT t1.Id, t1.Name, t1.CaseID, t2.CreatedDate
FROM Table1_Ranked t1
LEFT JOIN Table2_Ranked t2 
    ON t1.CaseID = t2.CaseID 
    AND t1.rn = t2.rn;

此方法通过PARTITION BY CaseID分组,ROW_NUMBER()生成组内行号,确保表1和表2的同组行按顺序一一对应,避免笛卡尔积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:44:54