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

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

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

SQL Anywhereは、パッケージソフト組込みやハードウェア組込みなどのパッケージの名称。RDBMSやデータベースの同期ミドルウェアもパッケージになっています。また、メインのRDBMSサーバーを指すこともあります。

MySQL

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

Q&A

解決済

1回答

2629閲覧

SQLでGroupByして3テーブル結合したい

ryoucyan2000

総合スコア18

SQL Anywhere

SQL Anywhereは、パッケージソフト組込みやハードウェア組込みなどのパッケージの名称。RDBMSやデータベースの同期ミドルウェアもパッケージになっています。また、メインのRDBMSサーバーを指すこともあります。

MySQL

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

0グッド

0クリップ

投稿2022/04/05 09:41

編集2022/04/06 00:34

質問の仕方でアドバイスいただきましたので内容を修正しました。
3個のテーブルを結合したいのですがうまくいきません
Mysql8.0です。

テーブル
①wsi
②machine_m
③send_program
があり
①のIDを[group by]したものと②をjoinして取得するのはうまくいきましたが
さらに③のIDを[group by]しようとすると

Error: ER_NO_SUCH_TABLE: Table 'pa.latest2' doesn't exist
となってしまします。なぜそうなってしまうのかわからず教えて下さい

質問途中で②に対して①と③をjoinすればよかったと思いましたが
テーブルをまたいだ結合方法として知りたいのでご教授いただきたく

2テーブル成功

SQL

1SELECT 2 psi.id AS id, 3 psi.ieee_address AS ieee_address, 4 machine_m.machine_name AS name, 5 psi.red_information AS red 6 FROM 7 (psi 8 JOIN (SELECT 9 psi.ieee_address AS ieee_address, 10 MAX(psi.id) AS ID 11 FROM 12 psi 13 GROUP BY psi.ieee_address) latest ON ((psi.ieee_address = latest.ieee_address) 14 AND (psi.id = latest.ID)) 15 JOIN machine_m ON (latest.ieee_address = machine_m.ieee));

3テーブルを結合失敗

SQL

1SELECT 2 psi.id AS id, 3 psi.ieee_address AS ieee_address, 4 machine_m.machine_name AS name, 5 psi.red_information AS red, 6 send_program.toolno as toolno 7 FROM 8 ((psi 9 JOIN (SELECT 10 psi.ieee_address AS ieee_address, 11 MAX(psi.id) AS ID 12 FROM 13 psi 14 GROUP BY psi.ieee_address) latest ON ((psi.ieee_address = latest.ieee_address) 15 AND (psi.id = latest.ID)) 16 JOIN (select 17 send_program.machine AS machine, 18 MAX(send_program.ID) AS ID2 19 FROM 20 send_program 21 GROUP BY send_program.machine) latest2 ON ((send_program.machine = latest2.machine) 22 AND (send_program.id = latest2.ID2))) 23 24 join latest2 ON machine_m.machine_name = latest2.machine) 25 join machine_m ON (latest.ieee_address = machine_m.ieee);

データ例

SQL

1create table psi( 2 id INT NOT NULL PRIMARY KEY, 3 ieee_address varchar(50) null, 4 red_information smallint(5) null 5); 6 7INSERT INTO psi 8 (id,ieee_address,red_information) 9VALUES 10 (1,123,1), 11 (2,123,0), 12 (3,123,1), 13 (4,223,0), 14 (5,223,2); 15 16create table machine_m( 17 id INT NOT NULL PRIMARY KEY, 18 ieee varchar(50) null, 19 machine_name tinytext null 20); 21 22INSERT INTO machine_m 23 (id,ieee,machine_name) 24VALUES 25 (1,123,"machine1"), 26 (2,223,"machine2"); 27 28create table send_program( 29 id INT NOT NULL PRIMARY KEY, 30 toolno tinytext null, 31 machine tinytext null 32); 33 34INSERT INTO send_program 35 (id,toolno,machine) 36VALUES 37 (1,"A001","machine1"), 38 (2,"A002","machine2"), 39 (3,"B001","machine1"), 40 (4,"A003","machine2") 41 ;

得たい結果

IDieee_addressnameredtoolno
3123machine11B001
5223machine22A003

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

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

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

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

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

yambejp

2022/04/05 09:45

具体的なサンプルデータと導きたい結果およびその根拠を例示ください
Orlofsky

2022/04/05 10:08

質問は修正できます。 テーブル定義はCREATE TABLE文で提示してください。 SELECT文で無意味なカッコは削ってください。
guest

回答1

0

ベストアンサー

仕様がつかめないですがこんなかんじで

SQL

1select t1.id, 2t1.ieee_address, 3t2.machine_name as name, 4t2.id as red, 5t3.toolno 6from ( 7select ieee_address,max(id) as id from psi group by ieee_address) as t1 8inner join machine_m as t2 on t1.ieee_address =t2.ieee 9inner join ( 10select machine ,max(toolno) as toolno from send_program group by machine) as t3 11on t2.machine_name =t3.machine

投稿2022/04/06 04:11

yambejp

総合スコア114896

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

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

ryoucyan2000

2022/04/06 10:29

ありがとうございました。 かなり遠回りな書き方をしていることがわかり大変勉強になりました。 やりたい内容を取得できました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問