{ “title”: “共通table式”, “description”: “Common table Expression (CTE) は、SQL文のスコープ内で複数回参照できる一時的な結果セットを定義します。”, “language”: “ja” }

説明

Common table Expression (CTE) は、SQL文のスコープ内で複数回参照できる一時的な結果セットを定義します。CTEは主にSELECT文で使用されます。

CTEを指定するには、WITH句を使用して1つ以上のカンマ区切りの句を記述します。各句は結果セットを生成するサブクエリを提供し、そのサブクエリに名前を関連付けます。

DorisはネストされたCTEをサポートしています。WITH句を含む文内では、各CTE名を参照して対応するCTE結果セットにアクセスできます。CTE名は他のCTEで参照することができ、他のCTEに基づいてCTEを定義することが可能です。

Dorisは再帰CTEをサポートしていません。詳細については、recursive CTEに関するMySQLマニュアルをお読みください。

シンプルなCTE

以下の例では、WITH句内でcte1とcte2という名前のCTEを定義し、WITH句の下のトップレベルのSELECTでそれらを参照しています:

WITH
  cte1 AS (SELECT a, b FROM table1),
  cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;

ネストされたCTE

WITH
  cte1 AS (SELECT a, b FROM table1),
  cte2 AS (SELECT c, d FROM cte1)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;

再帰CTE(サポート対象外)

WITH r_cte AS (
  SELECT 1 AS user_id, 2 as manager_id
  UNION ALL
  SELECT user_id, manager_id FROM r_cte INNER JOIN (SELECT 1 AS user_id, 2 as manager_id) t ON r_cte.manager_id = t.user_id
)
SELECT * FROM r_cte