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

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

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

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

Q&A

解決済

2回答

13135閲覧

SQL文の「~は 'on clause' にはありません。」というエラーの原因

Anon_tmr

総合スコア23

MySQL

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

0グッド

0クリップ

投稿2017/08/30 08:04

編集2017/08/30 08:05

こんにちは。

現在Javaを使用して開発を行っている者です。

データベースのテーブルを内部結合してデータを取り出そうとした際に出てきたエラーなのですが
原因が特定できずにいます。

SQL文は

SELECT * FROM group INNER JOIN group_to_site ON group.group_id = group_to_site.main_id

です。

#1054 - 列 'group.group_id' は 'on clause' にはありません。
というエラーが出てきてしまいます。

内容を見るとgroupテーブルにgroup_idが存在しないというメッセージなのかなと
思っているのですが、確かにテーブルにカラムは存在していることを確認しています。スペルミスも
見当たりません。

調べてみてもこれとった解決策が見つからず質問させていただきました。
なぜカラムがきちんと存在しているのにも関わらずこのようなエラーが発生してしまうのでしょうか?
もし心当たりがあれば教えていただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2017/08/30 08:08 編集

利用しているMySQLのバージョンと対象のテーブルのテーブル定義も環境情報として質問本文に追記いただけますか?
m.ts10806

2017/08/30 08:17

すみません。回答書きました。MySQLであること、バージョン等関係ないですね。
Anon_tmr

2017/08/30 08:48

いえとんでもないです!回答していただきありがとうございました!
guest

回答2

0

困ったときは物事を単純に考える

sql

1SELECT group.group_id FROM group

これだけを実行してみてください。
本当に実行できますか?

sql

1SELECT * FROM group

これだと group_idが返ってきますか?

そもそも groupって予約語だから`バッククォートでgroupを囲む必要があるのではと思いました。

sql

1SELECT * FROM `group`

投稿2017/08/30 08:19

Tak1016

総合スコア1408

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

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

m.ts10806

2017/08/30 08:23 編集

確かに``で囲えばいけますね。テーブル名見直してコメントする必要なかった・・
Anon_tmr

2017/08/30 08:50

ご回答ありがとうございます!予約語の関係だったみたいで‘‘の位置を変えたらできるようになりました!
guest

0

ベストアンサー

group はMySQLの予約語だからではないでしょうか?

カラム名やテーブル名として標準 SQL で許可されていません (GROUP など)。

テーブル名の見直しが必要です。
→Tak1016さん回答の通り``で囲えばselect時も利用できます。

SQL

1SELECT * FROM `group` 23ON `group`.group_id

追加アドバイス的なもの

何回もテーブル名書くと今回のように何箇所も修正しなければならないので、
生SQLを書いているのであれば表の別名をつけられると良いと思います。

SQL

1SELECT * FROM `group` as g 2inner join group_to_site as gtos 3ON g.group_id = gtos.main_id

投稿2017/08/30 08:16

編集2017/08/30 08:30
m.ts10806

総合スコア80850

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

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

Anon_tmr

2017/08/30 08:52

ご回答ありがとうございました!ご指摘通り予約語の関係だったようで、`group`.group_idとすると取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問