【发布时间】:2022-11-20 02:44:03
【问题描述】:
我在查询中使用了三个表; AP_INVOICES_INTERFACE 、 AP_INVOICE_LINES_INTERFACE 和 PO_HEADERS_ALL 作为子查询。
AP_INVOICE_LINES_INTERFACE 表仅在 PO_NUMBER 上从 AP_INVOICE_LINES_INTERFACE 连接到 PO_HEADERS_ALL 中的 SEGMENT1。我想用基于 SEGMENT1 等于 LN.PO_NUMBER 的 REQ_BU_ID 值填充“REQ_BU_ID2”列,而不是 NULL。
SELECT HDR.INVOICE_ID , HDR.PO_NUMBER , LN.PO_NUMBER LN_PO_NUMBER
, (SELECT PO2.REQ_BU_ID
FROM PO_HEADERS_ALL PO2
WHERE PO2.SEGMENT1 = LN.PO_NUMBER
AND PO2.REQ_BU_ID IS NOT NULL
AND LN.PO_NUMBER IS NOT NULL
--AND HDR.PO_NUMBER IS NOT NULL
AND rownum = 1 ) REQ_BU_ID2
FROM AP_INVOICES_INTERFACE HDR
INNER JOIN AP_INVOICE_LINES_INTERFACE LN ON LN.INVOICE_ID = HDR.INVOICE_ID
AND HDR.INVOICE_ID = 300000136747640
我想填充行的 REQ_BU_ID2(非空)值,即使 LN.PO_NUMBER 是 NULL 所以我想通过在子查询中使用 AND LN.PO_NUMBER IS NOT NULL 条件然后只返回非空值,但是如您所见,它仍在结果中返回Null:
上述查询的当前结果:
【问题讨论】:
-
如果相关子查询没有找到任何行,它返回 NULL。这不会导致排除外部查询中的任何行。您需要在外部查询中排除它们,而不是相关的子查询。
-
请阅读此内容,然后编辑您的问题:Please do not upload images of code/data/errors.