0

タイトルは少しわかりにくいかもしれませんが、クエリは私のジレンマを理解するのに役立つかもしれません. こんな問い合わせがあります


 SELECT TAB1.USER_ID,
        (SELECT DISTINCT MAX(SYS_CONNECT_BY_PATH(B.COL1, '/'))
           FROM (SELECT A.COL1,
                        ROW_NUMBER() OVER(ORDER BY A.COL1) AS curr,
                        ROW_NUMBER() OVER(ORDER BY A.COL1) - 1 AS prev
                   FROM (SELECT DISTINCT TAB2.COL1
                           FROM TABLE2 TAB2
                          WHERE TAB2.USER_ID = TAB1.USER_ID) A) B
         CONNECT BY PRIOR curr = prev
          START WITH curr = 1)
   FROM TABL1 TAB1
  WHERE TAB1.REC_STATUS = 'L'

TABLE1とTABLE2の2つのテーブルがあります。どちらも共通の属性である USER_ID を持っています。USER_ID に基づいて値を選択し、結果の行をテーブル自体 (A と呼ばれる) として扱っています。ただし、クエリは、A の外部で作成された TABLE1 の参照を取得できません。このクエリは、返されたすべての COL1 値のうち、USER_ID 条件に一致するものを実際に連結します。私は Oracle 9i を使用しているため、使用できる文字列連結は WM_CONCAT のみです。この関数は文書化されていないため、使用しないように言われました。

A ブロック内で TAB1 の列 (この場合は USER_ID) を参照する方法を教えてください。

どんな助けでも大歓迎です。

前もって感謝します

4

1 に答える 1

0

あなたは間違った方法でそれをやっています。

サブクエリは外側のクエリを参照できません。ネストされたクエリ (Exists を使用して作成するなど) のみが、内側のクエリで外側のクエリの属性を使用できます。

内部クエリで外部パラメーターを使用する例。

SELECT * FROM R S WHERE EXISTS (SELECT * FROM R WHERE R.a = S.a)
于 2012-06-04T04:22:45.920 に答える