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

SQL如何关联同一承运商表同时获取入库、出库承运商名称

货物出入库SQL报表实现方案

核心实现思路

由于入库、出库环节的承运商信息都存储在同一张承运商主表t2中,需要对核心单据表t1做两次关联查询匹配对应名称:

  • 两次关联t2表时使用不同别名,区分入库、出库承运商的匹配逻辑,避免同名字段冲突
  • 使用左连接(LEFT JOIN)关联,防止未维护承运商基础信息的单据被意外过滤
  • 最终输出字段严格按照需求指定的顺序排列,别名和要求的输出列名完全对齐

可直接使用的SQL代码

SELECT
  t1.date_in AS `DATE IN`,
  t1.goods AS `GOODS`,
  t2_in.name_shipper AS `NAME SHIPPER IN`,
  t1.date_out AS `DATE OUT`,
  t2_out.name_shipper AS `NAME SHIPPER OUT`
FROM t1
-- 匹配入库承运商名称
LEFT JOIN t2 t2_in
  ON t1.id_shipper_in = t2_in.id_shipper
-- 匹配出库承运商名称
LEFT JOIN t2 t2_out
  ON t1.id_shipper_out = t2_out.id_shipper;

适配调整说明

  • 如果业务规则要求出入库承运商信息必须完整才展示单据,可将LEFT JOIN替换为INNER JOIN
  • 若日期字段存储为时间戳或 datetime 类型,需要匹配示例中的日/月/年格式,可使用对应数据库的格式化函数处理:
    • MySQL/MariaDB:替换日期字段为DATE_FORMAT(t1.date_in, '%d/%m/%Y') AS \DATE IN``
    • PostgreSQL:替换日期字段为to_char(t1.date_in, 'DD/MM/YYYY') AS "DATE IN"
    • SQL Server:替换日期字段为CONVERT(VARCHAR, t1.date_in, 103) AS [DATE IN]
  • 若存在承运商ID为空、未在主表维护的场景,可使用COALESCE(t2_in.name_shipper, '待匹配承运商')给空值设置默认展示文本,避免报表出现空值影响可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:48:21