Как передать значение внешней таблицы в коррелированном подзапросе внутри иерархического запроса - PullRequest
0 голосов
/ 12 марта 2020

Как передать значение внешней таблицы в коррелированном подзапросе внутри иерархического запроса. здесь ORA-00904: «AN». «ID»: неверный идентификатор. из иерархического запроса мне нужно узнать CHILD_NODE_ID на основе последнего времени AUDIT_MODIFIED.

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 Ответ

0 голосов
/ 12 марта 2020

Агрегировать, чтобы сохранить только строку с максимальной датой аудита и номером самой ранней строки:

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
       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...