복붙노트

[SQL] 단일 쿼리에서 여러 개의 CTE

SQL

단일 쿼리에서 여러 개의 CTE

그것은 arel와 함께 단일 쿼리에서 여러 열팽창 계수를 결합 할 수 있습니까? 이 같은 GET 결과에 대한 방법을 찾고 있어요 :

WITH 'cte1' AS (
...
),
WITH RECURSIVE 'cte2' AS (
...
),
WITH 'cte3' AS (
...
)
SELECT ... FROM 'cte3' WHERE ...

당신이 볼 수 있듯이, 나는 하나의 재귀 CTE와 두 개의 비 재귀 있습니다.

해결법

  1. ==============================

    1.상단에 한 번 함께 핵심 단어를 사용합니다. 당신의 공통 테이블 식 (CTE)의 당신이 모든 CTE를 재귀 경우에도 한 번 또한 상단에있는 키워드 RECURSIVE를 추가해야합니다 (rCTE) 재귀 경우 :

    상단에 한 번 함께 핵심 단어를 사용합니다. 당신의 공통 테이블 식 (CTE)의 당신이 모든 CTE를 재귀 경우에도 한 번 또한 상단에있는 키워드 RECURSIVE를 추가해야합니다 (rCTE) 재귀 경우 :

    WITH RECURSIVE
      cte1 AS (...)         -- can still be non-recursive
    , cte2 AS (SELECT ...
               UNION ALL
               SELECT ...)  -- recursive term
    , cte3 AS (...)
    SELECT ... FROM cte3 WHERE ...
    

    수동 :

    굵게 강조 광산. 그리고, 더 많은 통찰력 :

    다시 굵게 강조 광산. 재귀 키워드가 사용 된 경우 절을 WITH의 순서는 의미가 있음을 의미.

    이 예에서 cte1 및 cte2 일반 SELECT 명령 자체 (NO 부수적 효과) 외부 SELECT에 언급되어 있지 않기 때문에 (cte3에서 참조하지 않는 한) BTW, 그들은 실행되지 않습니다.

  2. ==============================

    2.예. 당신은 WITH를 반복하지 않습니다. 당신은 쉼표를 사용합니다 :

    예. 당신은 WITH를 반복하지 않습니다. 당신은 쉼표를 사용합니다 :

    WITH cte1 AS (
    ...
    ),
         cte2 AS (
    ...
    ),
         cte3 AS (
    ...
    )
    SELECT ... FROM 'cte3' WHERE ...
    

    그리고 : 만 문자열 및 날짜 상수에 대한 작은 따옴표를 사용합니다. 열 별칭을 사용하지 마십시오. 그들은 어쨌든 CTE 이름을 사용할 수 없습니다.

  3. from https://stackoverflow.com/questions/35248217/multiple-cte-in-single-query by cc-by-sa and MIT license