簡體   English   中英

從Oracle中的左聯接子查詢檢索列

[英]Retrieving a column from a left join subquery in Oracle

我收到錯誤[Error] Execution (12: 25): ORA-00904: "N"."PORT_AID": invalid identifier在向我的spl子查詢添加左外部EDW_SPLITTER_NT_PORT后, [Error] Execution (12: 25): ORA-00904: "N"."PORT_AID": invalid identifier 我如何使查詢有效? 它是從n子查詢中獲取N.PORT_AID ,而在spl中沒有到達它? 我應該在spl子查詢中更改左EDW_SPLITTER_NT_PORT並將其EDW_SPLITTER_NT_PORTn子查詢中。

EDW_SPLITTEREDW_SPLITTER_NT_PORT彼此相關,所以這就是為什么我向該表添加了左EDW_SPLITTER_NT_PORT原因。 有什么建議么?

Select spl.splitter_addr AS splitter_address,
          spl.splitter_port,
          spl_port_status
          from (
   SELECT splitter.splitter_addr AS splitter_address,
          splitter.splitter_port,
          CASE
             WHEN splitter.SPLITTER_PORT_STATUS = 'ACTIVE'
             THEN
                CASE
                   WHEN n.PORT_AID IS NULL THEN 'INACTIVE'
                   ELSE 'ACTIVE'
                END
             ELSE --follow through with whatever splitter_port_status other than active remains:
                DECODE (splitter.splitter_port_status,
                        'IN-ACTIVE', 'INACTIVE',
                        splitter.splitter_port_status)
          END
             AS splitter_port_status

     FROM ls2.edw_splitter@WBCMLS1P.sbc.com splitter 
                          left outer join EDW_SPLITTER_NT_PORT nt
    --  ON     splitter.splitter_addr = nt.splitter_addr
    ON     splitter.eid = nt.eid
                          AND splitter.rack = nt.rack
                          AND splitter.shelf = nt.shelf
                          AND splitter.card = nt.card
                          AND splitter.port = nt.port)  spl


          LEFT OUTER JOIN
          (SELECT a.eid,
                  a.location_id,
                  o.rack,
                  o.shelf,
                  TO_NUMBER (SUBSTR (card, -2, 2)) AS slot,
                  o.port,
                  o.ont,
                  o.port_aid,
                  o.ont_type
             FROM ls2.actl73x0@WBCMLS1P.sbc.com a
                  LEFT OUTER JOIN ls2.ACTL73XX_ONT@WBCMLS1P.sbc.com o
                     ON a.eid = o.eid
           UNION ALL
           SELECT b.eid,
                  b.location_id,
                  1 rack,
                  1 shelf,
                  bo.card AS slot,
                  bo.port,
                  bo.ont,
                  REPLACE (bo.ont_aid, 'ONT', 'ONT-1-1') AS port_aid,
                  bo.ont_type
             FROM ls2.blm@WBCMLS1P.sbc.com b
                  LEFT OUTER JOIN ls2.blm_ont@WBCMLS1P.sbc.com bo
                     ON b.eid = bo.eid) n
             ON     spl.eid = n.eid
                AND n.rack = spl.rack
                AND n.shelf = spl.shelf
                AND n.slot = spl.slot
                AND n.port = spl.port
                AND n.ont = spl.ont

如果我正確閱讀了您的問題,則表示您的PORT_AID列來自n子查詢。 但是,您正在嘗試在spl子查詢中使用它,這在n子查詢的范圍之外。 您必須在spl子查詢中添加其他聯接才能在子查詢中公開該列,或者可以將其保留並在外部查詢中引用它。

另外,您在外部選擇中使用的splitter別名無效。

您的子查詢spl

SELECT splitter.splitter_addr AS splitter_address,
    splitter.splitter_port,
    CASE 
        WHEN splitter.SPLITTER_PORT_STATUS = 'ACTIVE'
            THEN CASE 
                    WHEN n.PORT_AID IS NULL
                        THEN 'INACTIVE'
                    ELSE 'ACTIVE'
                    END
        ELSE --follow through with whatever splitter_port_status other than active remains:
            DECODE(splitter.splitter_port_status, 'IN-ACTIVE', 'INACTIVE', splitter.splitter_port_status)
        END AS splitter_port_status
FROM ls2.edw_splitter@WBCMLS1P.sbc.com splitter
LEFT JOIN EDW_SPLITTER_NT_PORT nt
    --  ON     splitter.splitter_addr = nt.splitter_addr
    ON splitter.eid = nt.eid
        AND splitter.rack = nt.rack
        AND splitter.shelf = nt.shelf
        AND splitter.card = nt.card
        AND splitter.port = nt.port

引用n.PORT_AID但此子查詢中沒有派生表n 在這里說n.PORT_AID時不知道您在說什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM