3个表上的SQL左外部联接
我试图连接3个表,但结果显示该列是空数据。请参考以下详细信息,并告知情况。谢谢你 我有什么表格: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
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';