以下のSQLは同じテーブルからの副問い合わせが複数あります。
副問い合わせを複数書かずに、同様の結果を求める方法はありますか。
何卒よろしくお願いします。
該当のSQL
SQL
1SELECT 2 TABLE_A.A AS AA 3 , TABLE_A.B AS AB 4 , TABLE_A.C AS AC 5 , (SELECT TABLE_B.A FROM TABLE_B WHERE TABLE_B.D = TABLE_A.C ORDER BY TABLE_B.E ASC LIMIT 1) AS BA 6 , (SELECT TABLE_B.B FROM TABLE_B WHERE TABLE_B.D = TABLE_A.C ORDER BY TABLE_B.E ASC LIMIT 1) AS BB 7 , (SELECT TABLE_B.C FROM TABLE_B WHERE TABLE_B.D = TABLE_A.C ORDER BY TABLE_B.E ASC LIMIT 1) AS BC 8FROM 9 TABLE_A 10ORDER BY 11 AA, AB, AC
CRATE
1CREATE TABLE public.table_a ( 2 a varchar(10) NOT NULL, 3 b varchar(10) NULL, 4 c varchar(10) NOT NULL, 5 d varchar(10) NULL, 6 e varchar(10) NULL, 7 CONSTRAINT table_a_pkey PRIMARY KEY (a, c) 8); 9CREATE TABLE public.table_b ( 10 a varchar(10) NULL, 11 b varchar(10) NULL, 12 c varchar(10) NULL, 13 d varchar(10) NOT NULL, 14 e varchar(10) NOT NULL, 15 CONSTRAINT table_b_pkey PRIMARY KEY (d, e) 16);
TABLE
1INSERT INTO table_a(a, b, c, d, e)VALUES('A1', 'B1', 'C1', '', ''); 2INSERT INTO table_a(a, b, c, d, e)VALUES('A2', 'B2', 'C2', '', ''); 3INSERT INTO table_a(a, b, c, d, e)VALUES('A3', 'B3', 'C3', '', ''); 4 5INSERT INTO table_b(a, b, c, d, e)VALUES('C101', 'b_C101', 'c_C101', 'C1', '01'); 6INSERT INTO table_b(a, b, c, d, e)VALUES('C102', 'b_C102', 'c_C102', 'C1', '02'); 7INSERT INTO table_b(a, b, c, d, e)VALUES('C103', 'b_C103', 'c_C103', 'C1', '03'); 8INSERT INTO table_b(a, b, c, d, e)VALUES('C202', 'b_C202', 'c_C202', 'C2', '02'); 9INSERT INTO table_b(a, b, c, d, e)VALUES('C203', 'b_C203', 'c_C203', 'C2', '03'); 10INSERT INTO table_b(a, b, c, d, e)VALUES('C204', 'b_C204', 'c_C204', 'C2', '04'); 11INSERT INTO table_b(a, b, c, d, e)VALUES('C304', 'b_C304', 'c_C304', 'C3', '04'); 12INSERT INTO table_b(a, b, c, d, e)VALUES('C305', 'b_C305', 'c_C305', 'C3', '05'); 13INSERT 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の行は複数行ある前提でしょうか?
複数ある前提です。
> 具体的なデータのサンプルがあれば提示ください
申し訳ございません。サンプルデータはありません。
サンプルデータがないなら、新規で書いてください
また想定する結果も提示ください
質問本文に記載してください。
データは必要と思います。
「こういうデータを元にこういう結果を出したい」というのが伝わらないと、様々なパターンを想定した回答ができません。
特に「同じ結果となる別のやり方に書き換え」となると、コードだけでは出来てるかどうか客観的に回答者が判断できないので。
質問文に追記しました。
回答1件
あなたの回答
tips
プレビュー