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

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

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

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

10581閲覧

SpringBootにて、複数のテーブルからデータを取得する方法について

roto68

総合スコア7

MySQL

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2016/06/08 07:41

編集2016/06/08 08:01

###前提・実現したいこと
SpringBootを使用し、MySQLの複数のテーブルからデータを取得しようとしたところ、
下記のエラーが出ました。
t_bbmatchテーブルとt_nameテーブルを結合して表示するために、TtournamentEntityというクラスを作り、下記のコードで取得を試みておりました。

###発生している問題・エラーメッセージ
Whitelabel Error Page
There was an unexpected error (type=Internal Server Error, status=500).

エラーメッセージ

###該当のソースコード
@RequestMapping("/api/tournament")
public List<TtournamentEntity>selectAllTour() {
sql = "SELECT TSEQ,RSEQ,MASEQ,TOSEQ,MDATE,EMKSEQ,MKDATE,UPDATE,THOST,TNAME FROM t_bbmatch INNER JOIN t_name ON t_bbmatch.update = t_name.update";

RowMapper<TtournamentEntity> mapper = new BeanPropertyRowMapper<TtournamentEntity>(TtournamentEntity.class); List<TtournamentEntity> entList = jdbcTmpl.query(sql, mapper); return entList; }

###試したこと

t_bbmatchテーブル及びt_nameテーブル単体では、別のエンティティでデータを取得することはできています。
複数テーブルの取得方法についてご教授いただければと幸いです。

###補足情報(言語/FW/ツール等のバージョンなど)
java4.5.1,springboot

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

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

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

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

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

guest

回答1

0

ベストアンサー

SELECT TSEQ,RSEQ,MASEQ,TOSEQ,MDATE,EMKSEQ,MKDATE,UPDATE,THOST,TNAME FROM
の行で、UPDATEを取得する先のテーブル名を指定していないため、どちらから取得してよいか判明できないとMySQLからエラーが返されているかと思います。
これは複数のテーブルにカラム"update"があるためです。

他にも気になる点をいくつか。

JavaやSpringBootの問題ではなく、SQLの問題ではないかと思います。
他にも、Javaのバージョンが正しくありません。Eclipseのバージョンだと推察します。
エラー画面だけでなく、スタックトレースがあるとより回答が得られやすいでしょう。

投稿2016/06/08 08:50

A-pZ

総合スコア12011

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

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

roto68

2016/06/08 14:40

ご回答ありがとうございます。 おっしゃるとおり、私のミスで、javaではなくEclipseのバージョンです。 またご指摘の通り、MYSQLについて、テーブルを指定し忘れていますね。。 カラムが多く紛らわしいので、カラムを3つに絞り下記の通り別のテストコントローラを作成しました。(使用テーブルも変更) また同様にエラーが出ました。おそらくSQLの文法の問題だと思いますが。。 すぐ下のは新しいテスト用のコントローラーです。 @RequestMapping("/api/test2") public List<Test2Entity> selectAllTest2() { sql = "SELECT t_team.TSEQ,t_team.THOST,t_req.RTOUR FROM t_team LEFT JOIN t_req ON t_team.TSEQ = t_req.TSEQ"; RowMapper<Test2Entity> mapper = new BeanPropertyRowMapper<Test2Entity>(Test2Entity.class); List<Test2Entity> entList = jdbcTmpl.query(sql, mapper); return entList; } /api/test2/のエラーログ This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Jun 08 23:26:25 JST 2016 There was an unexpected error (type=Internal Server Error, status=500). StatementCallback; bad SQL grammar [SELECT t_team.TSEQ,t_team.THOST,t_req.RTOUR FROM t_team LEFT JOIN t_req ON t_team.TSEQ = t_req.TSEQ]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'spockey_db.t_req' doesn't exist
A-pZ

2016/06/09 02:00

Table 'spockey_db.t_req' doesn't exist と出ていますので、LEFT JOIN t_req ON t_team.TSEQ = t_req.TSEQ の LEFT JOIN で指定している箇所に誤りがあるようです。 LEFT JOIN テーブル名 ON ですね。
roto68

2016/06/09 16:16

ご回答ありがとうございます。 はい、テーブル名が間違えていました。 無事、解決いたしました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問