以下のSQLは同じテーブルからの副問い合わせが複数あります。
副問い合わせを複数書かずに、同様の結果を求める方法はありますか。
何卒よろしくお願いします。
該当のSQL
SQL
SELECT TABLE_A.A AS AA , TABLE_A.B AS AB , TABLE_A.C AS AC , (SELECT TABLE_B.A FROM TABLE_B WHERE TABLE_B.D = TABLE_A.C ORDER BY TABLE_B.E ASC LIMIT 1) AS BA , (SELECT TABLE_B.B FROM TABLE_B WHERE TABLE_B.D = TABLE_A.C ORDER BY TABLE_B.E ASC LIMIT 1) AS BB , (SELECT TABLE_B.C FROM TABLE_B WHERE TABLE_B.D = TABLE_A.C ORDER BY TABLE_B.E ASC LIMIT 1) AS BC FROM TABLE_A ORDER BY AA, AB, AC
CRATE
CREATE TABLE public.table_a ( a varchar(10) NOT NULL, b varchar(10) NULL, c varchar(10) NOT NULL, d varchar(10) NULL, e varchar(10) NULL, CONSTRAINT table_a_pkey PRIMARY KEY (a, c) ); CREATE TABLE public.table_b ( a varchar(10) NULL, b varchar(10) NULL, c varchar(10) NULL, d varchar(10) NOT NULL, e varchar(10) NOT NULL, CONSTRAINT table_b_pkey PRIMARY KEY (d, e) );
TABLE
INSERT INTO table_a(a, b, c, d, e)VALUES('A1', 'B1', 'C1', '', ''); INSERT INTO table_a(a, b, c, d, e)VALUES('A2', 'B2', 'C2', '', ''); INSERT INTO table_a(a, b, c, d, e)VALUES('A3', 'B3', 'C3', '', ''); INSERT INTO table_b(a, b, c, d, e)VALUES('C101', 'b_C101', 'c_C101', 'C1', '01'); INSERT INTO table_b(a, b, c, d, e)VALUES('C102', 'b_C102', 'c_C102', 'C1', '02'); INSERT INTO table_b(a, b, c, d, e)VALUES('C103', 'b_C103', 'c_C103', 'C1', '03'); INSERT INTO table_b(a, b, c, d, e)VALUES('C202', 'b_C202', 'c_C202', 'C2', '02'); INSERT INTO table_b(a, b, c, d, e)VALUES('C203', 'b_C203', 'c_C203', 'C2', '03'); INSERT INTO table_b(a, b, c, d, e)VALUES('C204', 'b_C204', 'c_C204', 'C2', '04'); INSERT INTO table_b(a, b, c, d, e)VALUES('C304', 'b_C304', 'c_C304', 'C3', '04'); INSERT INTO table_b(a, b, c, d, e)VALUES('C305', 'b_C305', 'c_C305', 'C3', '05'); INSERT INTO table_b(a, b, c, d, e)VALUES('C306', 'b_C306', 'c_C306', 'C3', '06');
期待される結果
A1 B1 C1 C101 b_C101 c_C101
A2 B2 C2 C202 b_C202 c_C202
A3 B3 C3 C304 b_C304 c_C304
補足情報(FW/ツールのバージョンなど)
実行環境はPostgres11です。
・両テーブルのCREATE TABLEを書いていただけないでしょうか?
・WHERE TABLE_B.D = TABLE_A.Cを満たすBの行は複数行ある前提でしょうか?
具体的なデータのサンプルがあれば提示ください
> ・両テーブルのCREATE TABLEを書いていただけないでしょうか?
```
CREATE TABLE TABLE_A (
A VARCHAR(10),
B VARCHAR(10),
C VARCHAR(10),
D VARCHAR(10),
E VARCHAR(10),
CONSTRAINT TABLE_A_PKEY PRIMARY KEY (A, C)
);
CREATE TABLE TABLE_B (
A VARCHAR(10),
B VARCHAR(10),
C VARCHAR(10),
D VARCHAR(10),
E VARCHAR(10),
CONSTRAINT TABLE_B_PKEY PRIMARY KEY (D, E)
);
```
> ・WHERE TABLE_B.D = TABLE_A.Cを満たすBの行は複数行ある前提でしょうか?
複数ある前提です。
> 具体的なデータのサンプルがあれば提示ください
申し訳ございません。サンプルデータはありません。
サンプルデータがないなら、新規で書いてください
また想定する結果も提示ください
質問本文に記載してください。
データは必要と思います。
「こういうデータを元にこういう結果を出したい」というのが伝わらないと、様々なパターンを想定した回答ができません。
特に「同じ結果となる別のやり方に書き換え」となると、コードだけでは出来てるかどうか客観的に回答者が判断できないので。
質問文に追記しました。
まだ回答がついていません
会員登録して回答してみよう