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

SQL左连接三张表时,如何拼接字段实现关联?技术求助

正确SQL写法指导

问题核心

你之前的错误在于使用子查询返回所有AAPEN_SORLIN的拼接结果,导致order_dupe_atributes与这些结果全量关联,进而产生重复数据。正确的做法是直接引用左连接已关联的asr表字段进行拼接,保证每行关联的对应性。

修正后的完整SQL

select * 
from order_dupe_check_cleaned dcc 
left join AAPEN_SORLIN asr
    on dcc.INTERNAL_ORDER_ID = asr.VLCODE 
left join order_dupe_atributes oda 
    on dcc.INTERNAL_ORDER_ID = oda.INTERNAL_ORDER_ID 
    and oda.product_id = concat_ws('', asr.VLDEPT, asr.VLSTYL)
where dcc.order_id like '73901124';

关键说明

  • concat_ws的用法:concat_ws第一个参数是分隔符,若不需要分隔符则传入空字符串''。它与||的核心区别是:当拼接的字段存在NULL时,concat_ws会忽略NULL返回有效内容,而||在部分数据库(如PostgreSQL)中只要有一个字段为NULL就会返回NULL,这可能是你之前用||时出现异常的原因之一。
  • 关联逻辑:通过左连接AAPEN_SORLIN后,直接使用当前行的asr.VLDEPT和asr.VLSTYL拼接,确保oda只与当前行对应的拼接值关联,避免全量匹配导致的重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:25:22