web-dev-qa-db-ja.com

単一のSQLに複数の「WITH AS」を含めることはできますか-Oracle SQL

非常に簡単な質問がありました。Oracleは、単一の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キーワードがありません

80
user1933888

これは次のように実行できます。

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

正しい構文は-

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;
23
Aditya Kakirde

はい、できます...

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

共通テーブル式で初期化する順序に従います

9
SriniV

Adityaまたは他の人、あなたの例でt2とt1を結合または一致させることはできますか?

with t1 as (select * from AA where FIRSTNAME like 'Kermit'),
     t2 as (select * from BB B join t1 on t1.FIELD1 = B.FIELD1)

WHEREのみが結合でサポートされているのか、2番目のWITHエンティティ内でどの結合アプローチがサポートされているのかはわかりません。一部の例では、WITH句の「下」のselectの本文にWHERE A = Bがあります。

これらのWITH宣言に従ってエラーが発生するのは、Bの識別子(フィールド名)が認識されず、残りのSQLの本文で認識されないことです。したがって、WITH構文は正常に実行されているように見えますが、t2の結果にはアクセスできません。

3
Dave