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

SQL Server子查询中使用Left Join出现语法错误如何解决

语法错误诱因
  • 缺少查询的基础数据源定义:你提供的SQL片段仅为JOIN关联部分,没有声明最基础的查询主表/主数据源。如果你的需求是直接关联两个子查询,需要将第一个子查询放在FROM关键字后作为主数据源,不能直接以(开头写子查询后直接接ON关联条件。
  • 关联条件不符合表结构定义:你给出的表结构中,tbl_ShipmentAPAR的主键为VendorID,tbl_vendors的外键为FK_VendorID,原SQL中LEFT JOIN的关联条件写反,且未加表前缀导致字段歧义。
修正代码

根据不同使用场景可选对应修正方案:

场景1:需要关联额外订单主表(含PK_OrderNo字段)

假设订单主表为tbl_Orders,替换为你实际的主表名即可:

SELECT 
  -- 此处补充你需要查询的输出字段
  o.PK_OrderNo,
  LHBase.LHVendor,
  DABase.DAVendor
FROM tbl_Orders o -- 主表,替换为实际表名
LEFT JOIN (
  SELECT 
    t1.FK_OrderNo AS LHNo, 
    t1.VendorName AS LHVendor
  FROM tbl_ShipmentAPAR t1
  LEFT JOIN tbl_vendors t2 
    ON t1.VendorID = t2.FK_VendorID -- 修正关联条件匹配表结构
  WHERE t2.FK_ServiceID = 'LH'
) LHBase 
  ON o.PK_OrderNo = LHBase.LHNo 
LEFT JOIN (
  SELECT
    t1.FK_OrderNo AS DANo,
    t1.VendorName AS DAVendor
  FROM tbl_ShipmentAPAR t1
  LEFT JOIN tbl_vendors t2 
    ON t1.VendorID = t2.FK_VendorID -- 修正关联条件匹配表结构
  WHERE t2.FK_ServiceId = 'DA'
) DABase 
  ON o.PK_OrderNo = DABase.DANo

场景2:仅需要关联两个子查询,无额外主表

直接将第一个子查询作为主数据源即可:

SELECT 
  -- 此处补充你需要查询的输出字段
  LHBase.LHNo,
  LHBase.LHVendor,
  DABase.DAVendor
FROM (
  SELECT 
    t1.FK_OrderNo AS LHNo, 
    t1.VendorName AS LHVendor
  FROM tbl_ShipmentAPAR t1
  LEFT JOIN tbl_vendors t2 
    ON t1.VendorID = t2.FK_VendorID
  WHERE t2.FK_ServiceID = 'LH'
) LHBase 
LEFT JOIN (
  SELECT
    t1.FK_OrderNo AS DANo,
    t1.VendorName AS DAVendor
  FROM tbl_ShipmentAPAR t1
  LEFT JOIN tbl_vendors t2 
    ON t1.VendorID = t2.FK_VendorID
  WHERE t2.FK_ServiceId = 'DA'
) DABase 
  ON LHBase.LHNo = DABase.DANo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:27:03