みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLが思うように抽出されなくて困っています。

MySQL のJavaです。

パラメータに、iPara_food_idとiPara_kind_idを与え、

1)comment_textが、null か、空っぽで、
2)limit_date が最大、
3)のレコードを1件抽出したいのですが、

String strSQL =
"SELECT record_id, color_id FROM foods"
+ " WHERE"
+ " (food_id = " + 123455/*iPara_food_id*/ + ")"
+ " AND (kind_id = " + 1545334/*iPara_kind_id*/ + ")"
+ " AND (comment_text IS NULL) OR (LENGTH(comment_text) = 0)"
+ " AND (delete_flag = false)"
+ " ORDER BY limit_date DESC"
+ " LIMIT 1";



テーブルとソースを何度も見直したり、
値を変更してみたり、

パラメータの値を変更してみたり、

したのですが、

パラメータに、iPara_food_idとiPara_kind_id。
何を与えても、同じレコードを抽出してきます。

それは、30件ほどのレコードの中で、
日付が途中くらいのもので、comment_text が空の
ものです。

comment_textが空のレコードは、
2件あるのですが、

固定で抽出してくるレコードは、
日付の大きいほうです。

なぜ、パラメータが聞かないのでしょうか?

※上記、思い切って、むちゃくちゃな、数値を
 指定していますが、それでも、同じレコードを
 抽出してきます。

投稿日時 - 2015-07-17 16:38:51

QNo.9013957

困ってます

質問者が選んだベストアンサー

こんにちわ。

演算子の優先順位の影響で意図した結果が得られていないのではないでしょうか?
ORを以下のように括弧でくくってあげるとどうでしょうか?
>+ " AND ((comment_text IS NULL) OR (LENGTH(comment_text) = 0))"

参考URL:http://www.dbonline.jp/mysql/ini/index10.html

投稿日時 - 2015-07-17 17:06:31

お礼

ご回答ありがとうございます。
完全に、見落としていました。
初心者とはいえ、絶対にやってはいけない、見落としです。
とても恥ずかしいです。

でも、大変たすかりました。
ありがとうございます。

投稿日時 - 2015-07-17 18:49:40

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問