1つのSQLの中に複数の"WITH AS"を含めることはできますか?

とても簡単な質問があります。oracleでは、1つのSQL文の中に複数の"WITH AS"を入れることができますか?

例を挙げます。

WITH abc AS( select ......)

WITH XYZ AS(select ....) /*This one uses "abc" multiple times*/

Select ....   /*using XYZ multiple times*/

同じクエリを複数回繰り返すことでクエリを動作させることができますが、そのようなことはせず、"WITH AS"を活用したいと考えています。 簡単な要求のように思えますが、oracleでは許可されません。

ORA-00928: SELECTキーワードがありません。

ソリューション

として行うことができます。

WITH abc AS( select
             FROM ...)
, XYZ AS(select
         From abc ....) /*This one uses "abc" multiple times*/
  Select 
  From XYZ....   /*using abc, XYZ multiple times*/
解説 (2)

正しい構文は -

with t1
as
(select * from tab1
where conditions...
),
t2
as
(select * from tab2
where conditions...
(you can access columns of t1 here as well)
)
select * from t1, t2
where t1.col1=t2.col2;
解説 (1)

そうですね。

WITH SET1 AS (SELECT SYSDATE FROM DUAL), -- SET1 initialised
     SET2 AS (SELECT * FROM SET1)        -- SET1 accessed
SELECT * FROM SET2;                      -- SET2 projected

10/29/2013 10:43:26 AM

Common Table Expressionsで初期化されるべき順序に従ってください。

解説 (0)