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

SQL左连接合并同名字段:主表非空优先,空值取从表值

解决双表LEFT JOIN后字段合并的问题

当然可以实现你的需求,核心是用SQL的COALESCE()函数逐个合并同名字段——这个函数会返回传入参数里的第一个非空值,完美匹配你"优先取主表非空值,主表为空则取从表值"的要求。

修改后的完整SQL语句

select distinct
  COALESCE(T1.data1, T2.data1) AS data1,
  COALESCE(T1.data2, T2.data2) AS data2,
  COALESCE(T1.data3, T2.data3) AS data3,
  COALESCE(T1.data4, T2.data4) AS data4
from TABLE_ONE T1
left join TABLE_TWO T2 on T1.data1 = T2.data1
  and (T1.data2 = T2.data2 OR (T1.data2 = '' OR T2.data2 = ''))
  and (T1.data3 = T2.data3 OR (T1.data3 = '' OR T2.data3 = ''))

逻辑说明

  • 替换原来的select distinct *为显式字段定义,每个字段用COALESCE(主表字段, 从表字段)合并:
    • 比如COALESCE(T1.data2, T2.data2)会先取T1的data2值,若T1的data2是空字符串,则取T2的data2值,对应你示例中car行的data2会返回spain
    • 对于主表非空的字段(比如car行的data1、data3、data4),直接保留主表的值

结果验证

执行修改后的SQL后,会得到你期望的合并结果:

data1data2data3data4
carspainred4
bikeblue9

补充提示

  • 若你的空值实际是NULL而非空字符串,需要把关联条件里的like ''改成IS NULL,COALESCE()同样能处理NULL的情况
  • 如果你的关联逻辑已经能保证不会产生重复行,可以去掉distinct

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:45:29