[sql] 단일 SQL에 여러 “WITH AS”를 사용할 수 있습니까?-Oracle SQL

저는 매우 간단한 질문을했습니다. 오라클은 단일 SQL 문에서 여러 “WITH AS”를 허용합니까?

예:

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

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

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

동일한 쿼리를 여러 번 반복하여 쿼리가 작동하도록 만들 수 있지만 그렇게하고 싶지 않고 “WITH AS”를 활용합니다. 간단한 요구 사항처럼 보이지만 오라클은 나를 허용하지 않습니다.

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*/


답변

올바른 구문은-

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;


답변

그래 넌 할수있어…

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

공통 테이블 표현식에서 초기화해야하는 순서를 따릅니다.


답변

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 만 지원되는지 또는 두 번째 WITH 엔터티 내에서 어떤 조인 접근이 지원되는지 확실하지 않습니다. 일부 예제에는 WITH 절의 “아래”선택 본문에 WHERE A = B가 있습니다.

이 WITH 선언을 따르는 오류는 B의 식별자 (필드 이름)가 인식되지 않고 나머지 SQL 본문에 있다는 것입니다. 따라서 WITH 구문은 정상적으로 실행되는 것처럼 보이지만 t2의 결과에 액세스 할 수 없습니다.


답변