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

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

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

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

解決済

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

thmimi
thmimi

総合スコア6

SQL

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

1回答

0評価

0クリップ

290閲覧

投稿2022/01/20 03:44

編集2022/01/20 15:59

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

質問文に追記しました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQL

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