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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

1062閲覧

MySQLの複数テーブルからのSELECT文がうまく抽出できません

RubyEye

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2021/01/26 05:29

編集2021/01/26 05:32

MySQL 8.0.22 を使用して複数テーブルからSELECT文を使用して結果を抽出しようとしています。

下記の3つのテーブルを作成しました。

MySQL

1CREATE TABLE `users` ( 2 `id` int NOT NULL AUTO_INCREMENT, 3 `user_id` varchar(20) NOT NULL, 4 `pass` varchar(64) NOT NULL, 5 `name` varchar(10), 6 PRIMARY KEY (`id`) 7) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

MySQL

1CREATE TABLE `shop` ( 2 `shop_id` int NOT NULL AUTO_INCREMENT, 3 `name` varchar(255) NOT NULL, 4 `input_time` timestamp NOT NULL, 5 `input_user_id` int NOT NULL, 6 PRIMARY KEY (`shop_id`) 7) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

MySQL

1CREATE TABLE `shop_history` ( 2 `id` int NOT NULL AUTO_INCREMENT, 3 `user_id` int NOT NULL, 4 `shop_id` int NOT NULL, 5 `update_time` timestamp NULL DEFAULT NULL, 6 `update_text` varchar(255) DEFAULT NULL, 7 PRIMARY KEY (`id`) 8) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

各テーブルに下記のテストデータを保存します。

DATA

1insert into users(user_id, pass, name) values('testName', 'testPass', 'テスト'); 2insert into users(user_id, pass, name) values('adminName', 'adminPass', '管理者'); 3insert into shop(name, input_time, input_user_id) values('サンプル店', now(), 1); 4insert into shop(name, input_time, input_user_id) values('テスト店', now(), 2); 5insert into shop_history(user_id, shop_id, update_time, update_text) values(2, 1, now(), 'テスト');

このデータベースを使用して
shop.name shop.input_time users.name shop_histroy.update_time users.name
を抽出しようとしています。

発生している問題・エラーメッセージ

以下のSQL文を実行したところ思った結果になりませんでした。

SQL

1select 2s.name shopName, 3s.input_time, 4u.first_name userName, 5sh.update_time, 6u2.first_name updateName 7from shop as s inner join users as u 8on s.input_user_id = u.id 9inner join shop_history as sh 10on s.shop_id = sh.shop_id 11join users as u2 12on u2.id = sh.user_id 13group by s.name

現在の結果と想定している結果

上記SQL文を実行するとshop_historyテーブルに入っているデータが表示されず、
shopテーブルにあるデータが表示されてしまいます。

望む結果としては、shop_historyにデータがあれば、そちらを優先して表示したいです。
ご教授をお願いいたします。

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

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

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

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

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

sousuke

2021/01/26 06:25

first_nameはuserテーブルにないのでエラーになります。提示のコードは実際のものではないのでしょうか? first_nameをnameに直すと1行表示されます。質問者さんの方ではどのような結果になっているのでしょうか?実行しているSQL文自体が違うのでは?
RubyEye

2021/01/26 06:56

ご指摘ありがとうございます。 提示のコードは、現在作成しているデータベースを簡潔にしたもので、転載する際に修正ミスしてしまっていました。申し訳ありません。 ご指摘の通りに「first_name」を「name」に変更して、いろいろ試した結果うまくいきました。 別途自己解決にてご報告させていただきます。
guest

回答1

0

自己解決

SQL

1select 2c.name shopName, 3c.input_time, 4u.first_name userName, 5ch.update_time, 6u2.first_name updateName 7from company as c join users as u 8on c.input_user_id = u.id 9left join company_history as ch 10on c.company_id = ch.company_id 11left join users as u2 12on ch.user_id = u2.id

で思った通りの結果になりました。
sousuke様、ご指摘ありがとうございました。

投稿2021/01/26 06:58

RubyEye

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問