質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

496閲覧

ORDER BY と LIMIT を使った副問い合わせの簡略化

thmimi

総合スコア7

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2022/01/20 03:44

編集2022/01/20 04:29

以下の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です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/01/20 03:47

・両テーブルのCREATE TABLEを書いていただけないでしょうか? ・WHERE TABLE_B.D = TABLE_A.Cを満たすBの行は複数行ある前提でしょうか?
yambejp

2022/01/20 03:48

具体的なデータのサンプルがあれば提示ください
thmimi

2022/01/20 04:02 編集

> ・両テーブルの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の行は複数行ある前提でしょうか? 複数ある前提です。 > 具体的なデータのサンプルがあれば提示ください 申し訳ございません。サンプルデータはありません。
yambejp

2022/01/20 04:03 編集

サンプルデータがないなら、新規で書いてください また想定する結果も提示ください
m.ts10806

2022/01/20 04:08

質問本文に記載してください。 データは必要と思います。 「こういうデータを元にこういう結果を出したい」というのが伝わらないと、様々なパターンを想定した回答ができません。 特に「同じ結果となる別のやり方に書き換え」となると、コードだけでは出来てるかどうか客観的に回答者が判断できないので。
thmimi

2022/01/20 04:30

質問文に追記しました。
guest

回答1

0

ベストアンサー

postgreの環境がないので微妙に文法が違うかもしれませんがこんなかんじ

SQL

1SELECT * FROM TABLE_A 2INNER JOIN ( 3SELECT * FROM TABLE_B AS T1 4WHERE NOT EXISTS (SELECT 1 FROM TABLE_B WHERE T1.d=d AND T1.e>e) 5) AS T2 ON TABLE_A.c=T2.d

投稿2022/01/20 06:59

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問