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
相关产品推荐
相关产品推荐

