LATERALサブクエリ

説明

LATERAL SUBQUERYは、キーワードLATERALの前にあるサブクエリです。前のFROM句の列を参照する方法を提供します。LATERALキーワードがないと、サブクエリは外部クエリ内の列のみを参照できますが、FROM句内では参照できません。LATERAL SUBQUERYは、複雑なクエリをよりシンプルで効率的になります。

構文

[ LATERAL ] primary_relation [ join_relation ]

パラメータ

CREATE TABLE t1 (c1 INT, c2 INT);
INSERT INTO t1 VALUES (0, 1), (1, 2);

CREATE TABLE t2 (c1 INT, c2 INT);
INSERT INTO t2 VALUES (0, 2), (0, 3);

SELECT * FROM t1,
  LATERAL (SELECT * FROM t2 WHERE t1.c1 = t2.c1);
+--------+-------+--------+-------+
|  t1.c1 | t1.c2 |  t2.c1 | t2.c2 |
+-------+--------+--------+-------+
|    0   |   1   |    0   |   3   |
|    0   |   1   |    0   |   2   |
+-------+--------+--------+-------+

SELECT a, b, c FROM t1,
  LATERAL (SELECT c1 + c2 AS a),
  LATERAL (SELECT c1 - c2 AS b),
  LATERAL (SELECT a * b AS c);
+--------+-------+--------+
|    a   |   b   |    c   |
+-------+--------+--------+
|    3   |  -1   |   -3   |
|    1   |  -1   |   -1   |
+-------+--------+--------+