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

LEFT JOIN匹配后出现额外空行重复,右表无NULL值如何解决

左连接返回多余NULL行问题排查与解决

根因分析

  • 核心原因是右表#temp_covid_inventory存在重复的(fac_abbrv, date)关联键组合:你已验证右表无NULL值,但未排查重复行。75组可匹配的关联键在右表中每条对应2条重复记录,左表1行匹配到右表2行时会返回2条结果,75*2=150,加上1条无匹配的左表行,总结果就是151行,与你遇到的现象完全吻合。
  • 可优先执行以下语句验证该结论:
SELECT fac_abbrv, date, COUNT(1) cnt
FROM #temp_covid_inventory
GROUP BY fac_abbrv, date
HAVING COUNT(1) > 1

如果执行后返回75条记录、每条cnt为2,即可确认该问题。

  • 补充排查点:也可执行SELECT COUNT(1) FROM #temp_fac_datesx确认左表行数确实为76,排除左表本身重复的可能性,从给出的数值来看右表重复概率更高。

解决方案

方案1:关联前对右表去重(推荐)

如果业务不需要右表重复行的额外数据,先按关联键对右表去重后再关联,可根据业务需求调整排序逻辑(如下方按createdAt倒序取最新记录):

select
    f.facility [Facility Code]
    , m.the_start
    , m.the_stop
    , case 
        when m.date is NULL then @current_start
        else CAST(Convert(date, m.date) as DateTime) 
      end as [Inventory Date] 
    , m.[createdAt] as last_entry_date
from #temp_fac_datesx f
left join (
    SELECT * 
    FROM (
        SELECT *,
            ROW_NUMBER() OVER(PARTITION BY fac_abbrv, date ORDER BY createdAt DESC) rn
        FROM #temp_covid_inventory
    ) t
    WHERE rn = 1
) m on f.facility = m.[fac_abbrv]
    AND f.[Inventory Date] = m.date;

方案2:新增关联条件

如果业务需要保留右表重复行,可新增更多关联条件缩小匹配范围,避免一对多关联生成多余行。

内容的提问来源于stack exchange,提问作者Son of Arathorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:54:04