如何在分层查询内的相关子查询中传递外部表值
Posted
技术标签:
【中文标题】如何在分层查询内的相关子查询中传递外部表值【英文标题】:How to pass outer table value in correlated sub query inside the hierarchical query 【发布时间】:2020-03-12 10:41:57 【问题描述】:。 这里 ORA-00904: "AN"."ID": 无效标识符。从分层查询中,我需要根据最新的 AUDIT_MODIFIED 时间找出 CHILD_NODE_ID。
SELECT *
FROM EMP_NODE ANN,
EMP_NODE AN ,
EMP_NODE_NODE_PROPERTIES ANP
WHERE ANP.NODE_ID=AN.ID
AND AN.TYPE_QNAME_ID IN ( SELECT ID FROM ALF_QNAME where LOCAL_NAME ='product' )
AND ANP.QNAME_ID IN (SELECT ID FROM ALF_QNAME where LOCAL_NAME='isbn')
AND ANN.ID= (
SELECT CHILD_NODE_ID
FROM (
SELECT C.CHILD_NODE_ID,
ROW_NUMBER() OVER (ORDER BY AUDIT_MODIFIED DESC) as ROW_NUMBER
FROM EMP_CHILD_ASSOC c,
EMP_NODE n
WHERE c.CHILD_NODE_ID=N.ID
AND N.TYPE_QNAME_ID =12345
START WITH PARENT_NODE_ID=AN.ID
CONNECT BY PRIOR CHILD_NODE_ID = PARENT_NODE_ID
) T1
WHERE ROW_NUMBER=1
);
【问题讨论】:
【参考方案1】:聚合以仅保留具有最长审计日期和最早行号的行:
SELECT *
FROM EMP_NODE ANN
CROSS JOIN EMP_NODE AN
INNER JOIN EMP_NODE_NODE_PROPERTIES ANP
ON ( ANP.NODE_ID=AN.ID )
WHERE AN.TYPE_QNAME_ID IN ( SELECT ID FROM ALF_QNAME where LOCAL_NAME ='product' )
AND ANP.QNAME_ID IN (SELECT ID FROM ALF_QNAME where LOCAL_NAME='isbn')
AND ANN.ID= (
SELECT MAX(CHILD_NODE_ID)
KEEP (DENSE_RANK FIRST ORDER BY AUDIT_MODIFIED DESC, ROWNUM ASC )
FROM EMP_CHILD_ASSOC c
INNER JOIN EMP_NODE n
ON ( c.CHILD_NODE_ID=N.ID )
WHERE N.TYPE_QNAME_ID =12345
START WITH PARENT_NODE_ID=AN.ID
CONNECT BY PRIOR CHILD_NODE_ID = PARENT_NODE_ID
);
【讨论】:
以上是关于如何在分层查询内的相关子查询中传递外部表值的主要内容,如果未能解决你的问题,请参考以下文章