LATERAL SUBQUERY

説明

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   |
+-------+--------+--------+