📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

L
T
d

共通テーブル式(CTE)は、SQL文内で複数回参照できる一時的な結果セットであり、文の可読性と実行効率を向上させます。共通テーブル式を使用するには、 WITH文を適用します。

概要

句:

WithClause
WITHWithListWITHRECURSIVEWithList

リスト付き:

WithList
WithList,CommonTableExprCommonTableExpr

共通テーブル式:

CommonTableExpr
IdentifierIdentListWithParenOptASSubSelect

親オプション付き識別子リスト:

IdentListWithParenOpt
(IdentList)

非再帰CTE:

WITH cte AS (SELECT 1, 2) SELECT * FROM cte t1, cte t2;
+---+---+---+---+ | 1 | 2 | 1 | 2 | +---+---+---+---+ | 1 | 2 | 1 | 2 | +---+---+---+---+ 1 row in set (0.00 sec)

再帰CTE:

WITH RECURSIVE cte(a) AS (SELECT 1 UNION SELECT a+1 FROM cte WHERE a < 5) SELECT * FROM cte;
+---+ | a | +---+ | 1 | | 2 | | 3 | | 4 | | 5 | +---+ 5 rows in set (0.00 sec)

MySQLの互換性

  • 厳密モードでは、再帰的に計算されたデータ長がシード部分のデータ長を超えると、TiDBは警告を返し、MySQLはエラーを返します。非厳密モードでは、TiDBの動作はMySQLの動作と一致します。
  • 再帰CTEのデータ型はシード部によって決定されます。シード部のデータ型は、場合によってはMySQLと完全に一致しないことがあります(関数など)。
  • 複数のUNION / UNION ALL演算子の場合、MySQL ではUNION後にUNION ALL続くことは許可されませんが、TiDB では許可されます。
  • CTE の定義に問題がある場合、TiDB はエラーを報告しますが、MySQL は CTE が参照されていない場合はエラーを報告しません。

参照

WITH | TiDB SQL Statement Reference最終更新日 4/30/2024, 7:23:33 AM: Link CTE docs (#17354)

このページは役に立ちましたか?