如何在分层查询内的相关子查询中传递外部表值

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
       );

【讨论】:

以上是关于如何在分层查询内的相关子查询中传递外部表值的主要内容,如果未能解决你的问题,请参考以下文章

SQL嵌套子查询和相关子查询的执行过程有啥区别

SQL嵌套子查询和相关子查询的执行过程有啥区别

sql sever 查询语句

SQL 子查询

为啥 SQL 子查询中的外部引用会产生不同的结果?

相关子查询 与 嵌套子查询 有何区别 ?