📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

LATERAL Derived Tables



lateral derived table とは、FROM 句内のサブクエリであり、同じ FROM 句内でそれより前に現れるテーブルのカラムを参照できるものです。標準的な派生テーブルでは、そのサブクエリは同じ FROM 句内の他のテーブルのカラムを参照できませんが、lateral derived table はより柔軟です。

v8.5.7 以降、TiDB は派生テーブルに対する LATERAL 構文のパースをサポートしています。これは MySQL 8.0 の構文(WL#8652)と互換性があります。

構文

SELECT ... FROM table_ref, LATERAL (subquery) [AS] alias [(col_list)] ... SELECT ... FROM table_ref [INNER | CROSS | LEFT [OUTER] | RIGHT [OUTER]] JOIN LATERAL (subquery) [AS] alias [(col_list)] ON ...
  • LATERAL キーワードは、派生テーブルのサブクエリの前に置く必要があります。
  • テーブルエイリアスは、サブクエリの閉じ括弧の後に必ず指定する必要があります。
  • エイリアスの前の AS キーワードは省略可能です。
  • オプションの派生カラムリストをエイリアスの後に続けることができます。たとえば、LATERAL (...) AS dt(col1, col2) のように指定します。

LATERAL 派生テーブルでカンマ結合を使用する

SELECT * FROM t1, LATERAL (SELECT * FROM t2 WHERE t2.id = t1.id) AS dt;

この例では、t1LATERAL 派生テーブルは、同じ FROM 句内でカンマによって結合されています。LATERAL 派生テーブル内のサブクエリは、先行するテーブル t1 のカラム t1.id を参照しています。LATERAL を付けない通常の派生テーブルでは、このような参照はサポートされません。

LEFT JOINLATERAL 派生テーブル(派生カラムリスト付き)を使用する

SELECT t1.id, dt.val FROM t1 LEFT JOIN LATERAL (SELECT t2.val FROM t2 WHERE t2.id = t1.id LIMIT 1) AS dt(val) ON TRUE;

この例では、LATERAL 派生テーブルは LEFT JOIN の右側のテーブルとして使用され、左側のテーブル t1 のカラム t1.id を参照できます。派生カラムリスト (val) は、サブクエリが返すカラムに val という名前を付けています。

標準的な派生テーブルとの比較

項目標準的な派生テーブルLATERAL 派生テーブル
同じ FROM 句内で先行するテーブルのカラムを参照できるかいいえはい
エイリアスが必須かはいはい
派生カラムリストサポートサポート

MySQL 互換性

TiDB の LATERAL 派生テーブル構文は、構文レベルで MySQL 8.0 と互換性があります。

関連情報

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