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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

4回答

7343閲覧

MySQLで、エラー"Unknown table 'res' in where clause"が発生

White_Rabbit

総合スコア38

MySQL

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2015/12/24 05:12

編集2015/12/26 02:51

JAVAで、MySQLのクエリーを作っています。

下記クエリーで、実行すると "Unknown table 'res' in where clause" エラーが出てしまいます。
解決策はございますでしょうか?

顧客テーブル:costomer
顧客予約テーブル:costomer_reservation


SELECT cos., res. FROM costomer cos
INNER JOIN
(SELECT * FROM costomer_reservation r1
WHERE NOT EXISTS
(SELECT * FROM costomer_reservation r2
WHERE
r1.customer_id = r2.customer_id
AND r1.reservation_date < CURRENT_DATE
AND r1.reservation_date < r2.reservation_date
AND r1.company_id = 79
AND r1.delete_flag = false
)
) res ON cos.customer_id = res.customer_id

WHERE
(cos.company_id = 79) AND (cos.delete_flag = false) AND (res.delete_flag = false)
AND true = ((name LIKE '%水%') AND (address LIKE '%水%')
OR (cos.memo LIKE '%水%') OR ( res.memo LIKE '%水%')) <----- ここでエラーがでている?この行が無いとエラーがでない。
)


上記をJAVA内で実行すると、下記エラーが発生します。
対策方法がわかりますでしょうか?

★エラー
java.sql.SQLException: DB.executeQuery():Base table or view not found, message from server: "Unknown table 'res' in where clause"

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2015/12/31 14:06

使用しているJavaとMySQLのバージョンと回答内で問われているO/Rマッパーの情報について追記した方がいいのでは? あと、回答内のやり取りでテーブル構成も変わってるようなので質問内容のSQLを最新化するべきかと。 あとSQLが見にくいので質問内のSQLはテラテイルのコードテンプレート(?)を使用しましょう。
guest

回答4

0

単純に"res"というテーブルがないからではないでしょうか?
costomer cos はちゃんと別名指定しているのに、resの指定はないように見えます。
もしresというテーブルが存在しているのでしたら見当違いですので無視してください^^;

投稿2015/12/24 09:12

編集2015/12/24 09:15
ao_love

総合スコア441

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

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

White_Rabbit

2015/12/25 02:58

ご回答ありがとうございます。 resは、下記行に指定してあります。 >) res ON cos.customer_id = res.customer_id
guest

0

SQLを何かしら直接実行できるクライアント上で流して、正しく流れるかを確認してください。
次に、Java側でログを出してSQLが正しいか確認してみてください。

適当にテーブル名を変えて例示のSQLを試しましたが、特に問題無く実行できました。
なので、単純な記述ミスのような気がするのですが…。

投稿2015/12/24 08:06

anonymouskawa

総合スコア856

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

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

White_Rabbit

2015/12/26 02:05 編集

ご回答ありがとうございます。 JAVAで、SQL文をそのまま出力し、 そのまま手を加えずに、MySQL-Frontにクエリー状態で実行させるとエラーになりません。 Javaの固有の固有のもんなのか?と疑問に感じています。 ※MySQLは、クエリー状態で、MySQL-Frontでうごいているのことからの予想ですが。
anonymouskawa

2015/12/25 04:42

それであれば、SQLに問題があるようには思えないですね…。 AND true = ((cos.memo LIKE '%水%') OR ( res.memo LIKE '%水%')) この部分を AND cos.memo LIKE '%水%' だけにして実行してみた場合と AND res.memo LIKE '%水%' のみにして実行した場合で差が出るかご確認いただけますか。
White_Rabbit

2015/12/26 01:40

ご回答、ご提案をありがとうございます。 早速やってみます。
White_Rabbit

2015/12/26 02:28 編集

第一次ご報告: >AND cos.memo LIKE '%水%'   のみにする の場合、下記エラーがでます。 java.sql.SQLException: DB.executeQuery():Base table or view not found, message from server: "Unknown table 'cos' in where clause"
White_Rabbit

2015/12/26 02:28 編集

第二ご報告: >AND res.memo LIKE '%水%'  のみにする java.sql.SQLException: DB.executeQuery():Base table or view not found, message from server: "Unknown table 'res' in where clause"
White_Rabbit

2015/12/26 02:32

以上、ご提案でテストしてみました。 尚、上記、個別のSQL文をSystem.out.println((strSQL)で、ログへ出力したものを、 全く手を加えずに、My-SQLフロントは貼り付けて実行すると正常に検索処理ができます(エラーになりません)。 雲をつかむようで、具体的にどうすればよいか?が不明ですが、 もっといろいろなパターンでやってみます。
White_Rabbit

2015/12/26 02:35

PS. 一つ気づいたがあります。name や、addressなどは、テーブル項目が、varchar型で、エラーにならないのですが、 memoだけは、text型なので、 memoをvarchar型にして、JAVAを実行して、テストしてみます。
White_Rabbit

2015/12/26 02:49

text型にしても、同じエラー(resやcosテーブルが無いエラー)になります。 なぜ、このmemo項目だけが、エラーなのか? もっと、色々ためしています。
White_Rabbit

2015/12/26 03:06

res.memo の方の項目名を変更し、res.memo_textに変更し、 cos. や res. をつけなくて良いように変更してみます。
anonymouskawa

2015/12/26 04:57

色々情報ありがとうございます。 一度、memoに対しLIKEではなく、=で条件を結んでみてもらってもいいでしょうか。
anonymouskawa

2015/12/26 05:06

もう一つ、Javaで使っているO/Rマッパーは何でしょうか。
White_Rabbit

2015/12/26 08:56

>もう一つ、Javaで使っているO/Rマッパーは何でしょうか。 確認致します。
White_Rabbit

2015/12/26 09:06 編集

>res.memo の方の項目名を変更し、res.memo_textに変更し、 >cos. や res. をつけなくて良いように変更してみます。 の結果ですが、 memo LIKE '%水%' は、エラーがでなくなりました。 が、 res.memo_text LIKE '%水%' があると、resが無いという同じエラーになります。 そこで、 memo_text LIKE '%水%' にしたのですが、今度は、memo_text 項目が無いエラーになっていますので、調査中です。 memo_text項目がテーブルに存在することは、JAVAで出力したクエリー文をそのまま、MySQL-FRONで確認しエラーがでないので、確認できています。 今は、なぜ、JAVAだと、memo_text項目が無いエラーになるのかを調べていますが、memo_text文字をテーブルからソースへコピー&ペーストしても、発生するので、項目名のつづり間違いでもなく、MySQL-Frontで正常に実行できていることからも、つづり間違いや項目がテーブルに無いということではない と判断しています。
anonymouskawa

2015/12/26 09:33

これが解決できるならば、おそらくこの質問は後々誰かの役に立つと思います。 ORマッパー側で悪さをしているのか、というところがこの先の調査になりそうです。 もし、Java側の前後の処理で何かしら疑わしいログがあるようでしたら、教えていただけないでしょうか。
White_Rabbit

2015/12/26 10:15 編集

ご回答ありがとうございます。 ORマッパーが何なのかを調べる方法をネットでさがしていますので、それが分かり次第、確認して書き込み致します。※調べ方も書きこみします。 ※JAVAなのに、変数に接頭語を使っていて、標準からずれており申し訳ございません。 Java側では、シンプルな関数の中に、このSQL作成文と、作成したSQL文のSystem.out.println(strSQL)、SQL実行、SQL実行後のデータをDB変数からStringへ代入、抽出件数を返却するreturn iCountと、これらをtryとcatchで、くくってあるシンプルな関数です。 なので、悪さをしているという点では、無いと判断しております。
White_Rabbit

2015/12/29 00:03

状況ですが、「memo_text項目が無いエラー」になる原因を、ずっと調査しています。 ですが、何か回避策が無いかも考え始めています。
guest

0

こんな感じ↓
SELECT
cos.,
res.

FROM
costomer cos
INNER JOIN costomer_reservation r1 ON cos.customer_id = res.customer_id AND r1.delete_flag = false AND AND reservation_date > CURRENT_DATE
WHERE
cos.company_id = 79
AND cos.delete_flag = false
AND (cos.memo LIKE '%水%' OR res.memo LIKE '%水%')
AND res.delete_flag = false

投稿2015/12/24 06:41

YiLi

総合スコア96

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

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

White_Rabbit

2015/12/25 03:01

ご回答ありがとうございます。 早速試してみます。
White_Rabbit

2015/12/26 01:48

状況のご報告です。 同じエラーがでます。それで、色々記述場所を移動させたり、resを外したりしてみましたが、ダメなのようなので、 さらに、色々なパターンを試してみます。
guest

0

TRUE =
上記って必要でしょうか?

投稿2015/12/24 06:00

liguofeng29

総合スコア801

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

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

White_Rabbit

2015/12/25 03:00

ご回答ありがとうございます。 ご指摘通り不要かと判断しておりますので、削除して動作確認をします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問