【发布时间】:2015-05-20 06:27:33
【问题描述】:
在我将左外连接 EDW_SPLITTER_NT_PORT 添加到我的 spl 子查询后,我收到错误 [Error] Execution (12: 25): ORA-00904: "N"."PORT_AID": invalid identifier。我怎样才能让我的查询工作?它从n 子查询中获取N.PORT_AID 并且它没有在spl 中到达它?我是否应该在spl 子查询中更改我的左连接EDW_SPLITTER_NT_PORT 并将其连接到底部的n 子查询。
EDW_SPLITTER 和 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
【问题讨论】: