LoginSignup
2
0

More than 3 years have passed since last update.

相関サブクエリの複数カラムを一括で取得する(LATERAL句)

Posted at

こちらの記事 にある「相関サブクエリの複数カラムを一括で取得する」件、LATERAL句を使うことができないか?と思いました。

LATERAL 句

  • Oracle 12c (12.1) から
  • PostgreSQL 9.3 から
  • MySQL 8.0.14 から

スキーマ

create table cmain
(
  n varchar(1),
  d varchar(2),
  key1 varchar(3),
  key2 varchar(4)
);

create table csubt
(
  d varchar(4),
  dd varchar(3),
  key1 varchar(3),
  key2 varchar(4)
);

insert into cmain values('1','11','111','1111');
insert into cmain values('2','22','222','2222');
insert into cmain values('3','33','333','3333');

insert into csubt values('1100','101','111','1111');
insert into csubt values('2200','202','222','2222');
insert into csubt values('3300','303','333','3333');

SQL

SELECT cm.n    AS cm_n,
       cm.d    AS cm_d,
       cm.key1 AS cm_key1,
       cm.key2 AS cm_key2,
       cb.d    AS cb_d,
       cb.dd   AS cb_dd
FROM cmain cm,
LATERAL (
  SELECT t.d, t.dd
  FROM csubt t
  WHERE t.key1 = cm.key1
  AND t.key2 = cm.key2
) cb
ORDER BY cm_key1, cm_key2

実行結果

cm_n cm_d cm_key1 cm_key2 cb_d cb_dd
1 11 111 1111 1100 101
2 22 222 2222 2200 202
3 33 333 3333 3300 303

個人的には

使いみちとして合ってそうですが、頻繁に LATERAL を使うかと言われると、微妙。
列が2個くらいだったら、SELECT句に副問合せを書いてしまうかも。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0