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

关联order_release_remark无匹配时如何显示view_shipment_order_release数据?

解决思路:用左外连接保留主表所有数据

这个问题的核心是连接类型的选择——你当前的查询应该用了内连接(INNER JOIN),它只会返回两张表中匹配关联条件的记录。要实现主表view_shipment_order_release的数据无论关联表有没有匹配都显示,你需要改用左外连接(LEFT OUTER JOIN,可简写为LEFT JOIN)。

针对你关联了三次order_release_remark的场景,每个关联都要单独使用LEFT JOIN,同时要注意把备注类型的筛选条件放在ON子句里(而非WHERE),避免过滤掉主表无匹配的记录。

修改后的完整查询示例

SELECT DISTINCT
    vsor.shipment_gid,
    vsor.order_release_gid,
    orem1.remark_text AS Related_Party,
    orem2.remark_text AS ULTIMATE_CONSIGNEE_TYPE,
    orem3.remark_text AS CONSIGNEE_TYPE
FROM view_shipment_order_release vsor
-- 左连接获取Related_Party类型的备注
LEFT JOIN order_release_remark orem1
    ON vsor.order_release_gid = orem1.order_release_gid
    AND orem1.remark_type = 'RELATED_PARTY' -- 请根据实际业务的备注类型字段调整
-- 左连接获取ULTIMATE_CONSIGNEE_TYPE类型的备注
LEFT JOIN order_release_remark orem2
    ON vsor.order_release_gid = orem2.order_release_gid
    AND orem2.remark_type = 'ULTIMATE_CONSIGNEE_TYPE'
-- 左连接获取CONSIGNEE_TYPE类型的备注
LEFT JOIN order_release_remark orem3
    ON vsor.order_release_gid = orem3.order_release_gid
    AND orem3.remark_type = 'CONSIGNEE_TYPE'
-- 如果有其他全局筛选条件,放在这里,但不要过滤左连接后为NULL的字段
-- WHERE vsor.some_condition = 'xxx'

关键注意点

  1. 左连接的作用:每个LEFT JOIN都会保留主表view_shipment_order_release的所有记录,即使对应的order_release_remark没有匹配行,对应的remark_text字段会显示NULL。
  2. 筛选条件的位置:把备注类型的判断放在ON子句里,而不是WHERE。如果放在WHERE里,会把左连接后remark_type为NULL的记录过滤掉,变回内连接的效果。
  3. DISTINCT的保留:继续保留DISTINCT可以避免因多表关联产生的重复行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:02:11