2017-12-21 2 views
0

Oracle 11gを使用しています。ネストされたSQLクエリを使用するとエラーが発生します。ネストされたクエリの列の参照

私は次のクエリを実行しようとすると、私は

"U.RSRC_ID" を取得:無効な識別子*

ここでは、Oracleで

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

なしありあなたの質問にPL/SQL。 –

+0

はこのpl/SQLではありませんか? @a_horse_with_no_name –

+0

いいえ、PL/SQLはストアド・プロシージャ用です。これは単純なSQLです。 –

答えて

2

SQLクエリですが外側のレイヤーをちょうど1レベル深く参照することができます。この場合、2レベルの列をより深く参照しています。これは、9行目にあります。

WHERE RSRC_ID IN (u.RSRC_ID) 

は編集:選択したインナー書き換え、フィルタ、パフォーマンスのために良いではないであろう1つの上のレベルアップをもたらすが、結果はOKでなければなりませんでした:

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つの深いレベルを参照する方法はありますか? –

関連する問題