3个表上的SQL左外部联接

3个表上的SQL左外部联接,sql,Sql,我试图连接3个表,但结果显示该列是空数据。请参考以下详细信息,并告知情况。谢谢你 我有什么表格: 1) EXPORT_SHIPMENT SHPMNT_REF UPDATE_USER TYPE 1002 A CS 1003 B CA 2) EXPORT_ONHAND ONHAND_REF UPDATE_USER TYPE SHPMNT_REF 50001 A

我试图连接3个表,但结果显示该列是空数据。请参考以下详细信息,并告知情况。谢谢你

我有什么表格:

1) EXPORT_SHIPMENT
SHPMNT_REF  UPDATE_USER    TYPE
1002            A           CS
1003            B           CA 

2) EXPORT_ONHAND
ONHAND_REF  UPDATE_USER     TYPE   SHPMNT_REF
 50001           A           CS      1002
 50002           B           CA      1003 

3) VW_EXPORT_EVENT_VCB
 FILE_NO    VCB_FA_CREATED_TIME
 50001        2018-07-26          
 50002        2018-07-25               
我所做的如下:

SELECT 
    ES.SHPMNT_REF,
    V.VCB_FA_CREATED_TIME
FROM 
    EXPORT_SHIPMENT ES 
LEFT OUTER JOIN
    (SELECT 
         OH.ONHAND_REF,
         VCB.FILE_NO,
         VCB.VCB_FA_CREATED_TIME
     FROM 
         EXPORT_ONHAND OH 
     INNER JOIN 
         VW_EXPORT_EVENT_VCB VCB ON OH.ONHAND_REF = VCB.FILE_NO) AS "V" ON ES.SHPMNT_REF = V.ONHAND_REF
WHERE
    ES.SHPMNT_REF <> '1001'

请帮忙。非常感谢

您可以尝试下面的查询

select ES.SHPMNT_REF,T.VCB_FA_CREATED_TIME from EXPORT_SHIPMENT ES 
  left join

  (
    select * from EXPORT_ONHAND EO
   inner join   
  VW_EXPORT_EVENT_VCB VW on EO.ONHAND_REF=VW.FILE_NO
    )
   as T 

  on ES.SHPMNT_REF=T.SHPMNT_REF
请参阅下面的链接

试试这个

 SELECT 
        ES.SHPMNT_REF,
        V.VCB_FA_CREATED_TIME
    FROM 
        EXPORT_SHIPMENT ES 
    LEFT OUTER JOIN
        (SELECT 
             OH.SHPMNT_REF,
             VCB.FILE_NO,
             VCB.VCB_FA_CREATED_TIME
         FROM 
             EXPORT_ONHAND OH 
         INNER JOIN 
             VW_EXPORT_EVENT_VCB VCB ON OH.ONHAND_REF = VCB.FILE_NO) AS V 
             ON ES.SHPMNT_REF = V.SHPMNT_REF
    WHERE
        ES.SHPMNT_REF <> '1001';

因为您在表上执行左外部联接,所以它会为V中没有匹配行的数据行显示空值。如果只需要匹配行,请将左外部联接更改为内部联接。您好@CoderofCode,我已将“左外连接”更改为“内连接”,但结果仍然相同。您所说的V.VCB_FA_CREATED_时间是什么意思?在我运行此代码后,将显示该时间?您是否有一些数据示例?您是否可以提供一些您希望显示的数据,即导出装运SHPMNT\u REF、导出现有\u REF和VW\u导出事件\u VCB文件\u NO、VCB\u FA\u创建时间。我仍然不确定您期望的是什么,也不确定您实际看到的是什么。@CKAng在左侧外部联接中,左侧表将显示所有行,而仅显示右侧匹配的行。由于VCB_FA_CREATED_TIME来自正确的表,如果正确的表具有匹配的行,并且VCB_FA_CREATED_TIME的值不为null,那么您将不会有null值。否则,它将为空。您能创建一个最小的可验证示例并将其托管在一个服务上吗?这样我们就可以更好地了解您的问题以及将重新创建它的数据。@这有帮助吗?顺便说一句,如果使用此方法,我的SHPMNT\u REF将重复,您知道如何解决它吗?只需使用distinctThanks,它的工作很好,但它会显示重复记录,你知道如何解决它吗?
 SELECT 
        ES.SHPMNT_REF,
        V.VCB_FA_CREATED_TIME
    FROM 
        EXPORT_SHIPMENT ES 
    LEFT OUTER JOIN
        (SELECT 
             OH.SHPMNT_REF,
             VCB.FILE_NO,
             VCB.VCB_FA_CREATED_TIME
         FROM 
             EXPORT_ONHAND OH 
         INNER JOIN 
             VW_EXPORT_EVENT_VCB VCB ON OH.ONHAND_REF = VCB.FILE_NO) AS V 
             ON ES.SHPMNT_REF = V.SHPMNT_REF
    WHERE
        ES.SHPMNT_REF <> '1001';