2017-12-21 14 views
0

Oracle 11g을 사용하고 중첩 SQL 쿼리를 사용할 때 오류가 발생합니다.중첩 쿼리의 열 참조

나는 다음과 같은 쿼리를 실행하려고 할 때, 나는

"U.RSRC_ID"를 얻을 : 유효하지 않은 식별자가 * 여기

오라클에서 SQL 쿼리

SELECT u.first_name, 
u.RSRC_ID, 
(SELECT SUBSTR(SYS_CONNECT_BY_PATH (dn, ',') ,2) FROM 
    (
     SELECT USER_NAME as dn, RSRC_ID as rsccid, 
     ROW_NUMBER() OVER (ORDER BY user_name) rn, 
     COUNT (*) OVER() cnt 
     FROM ADDRLOOKUP 
     WHERE RSRC_ID IN (u.RSRC_ID) AND primary_addr=4 
    ) 
    WHERE rn  = cnt 
    START WITH rn = 1 
    CONNECT BY rn = PRIOR rn + 1 
) AS multipleDn 

FROM USERINFO u 
WHERE u.RSRC_ID  IN (123,124) ; 
+0

이 더 있습니다 그것은 9 호선에 귀하의 질문에 PL/SQL. –

+0

이 pl/SQL이 아닙니까? @a_horse_with_no_name –

+0

번호 PL/SQL은 저장 프로 시저 용입니다. 이것은 단순한 SQL입니다. –

답변

2

입니다 당신은 단지 1 레벨 깊이의 외부 레이어를 참조 할 수 있습니다. 이 경우 2 레벨을 더 깊이 참조하는 것입니다.

WHERE RSRC_ID IN (u.RSRC_ID) 

편집 : 당신은 내 선택을 다시 작성할 수 없었다 그 성능 좋은되지 않을 것, 필터를 한 단계 업을 가지고 있지만, 결과가 확인을해야 :

SELECT u.first_name, 
u.RSRC_ID, 
(SELECT SUBSTR(SYS_CONNECT_BY_PATH (dn, ',') ,2) FROM 
    (
     SELECT USER_NAME as dn, RSRC_ID as rsccid, 
     ROW_NUMBER() OVER (partition by RSRC_ID ORDER BY user_name) rn, 
     COUNT (*) OVER (partition by RSRC_ID) cnt 
     FROM ADDRLOOKUP 
     WHERE primary_addr=4 
    ) 
    WHERE rn  = cnt 
    and rsccid = u.RSRC_ID 
    START WITH rn = 1 
    CONNECT BY rn = PRIOR rn + 1 
) AS multipleDn 
FROM USERINFO u 
WHERE u.RSRC_ID IN (123,124) ; 
+0

2 개의 깊은 레벨을 참조 할 수있는 방법이 있습니까? –