前提・実現したいこと
初心者PGです。
検索フォームを開発しています。
画面に3つのボタン(SQLでのちのWHERE句の条件になります)があり、
その押下状況(値)によってDBをSELECTし、結果を表示したいです。
DBはSQLServer、言語はJava(Seasar2)です。
・ボタンは「いぬ(value:AA)」「ねこ(value:BB)」「それ以外(value:CC)」の3つです。
・検索しにいくカラム名はanimalCDです。
・ボタンは複数選択可能です。
・この項目は必須項目です。
「いぬ」が選択された場合に発行したいSQL(実際にこの通りに発行したいわけではなく結果をこのSQLで得られる結果にしたいです)
SQL
1select * from ANIMALTABLE where animalCD = 'AA'
「ねこ」が選択された場合に発行したいSQL
SQL
1select * from ANIMALTABLE where animalCD = 'BB'
「それ以外」が選択された場合に発行したいSQL
SQL
1select * from ANIMALTABLE where animalCD NOT IN ('AA','BB')
「それ以外」はvalueを持っていますが、DBのanimalCDには"CC"という値は存在しません。
「いぬ」「ねこ」の2つが選択された場合も両方に該当する結果を表示します。
「いぬ」「ねこ」「それ以外」の3つが選択された場合も然りです。
どのボタンが押されてどの組み合わせにも対応できるよう、SQLを動的にしたいです。
試したこと
該当のSQLファイルを以下のようにしました。
変数animalCdには画面から取得したanimalCdをリストで保持しSQLファイルに渡します。
SQL
1select * from ANIMALTABLE 2where 3/*IF animalCd != null*/ -- 必須項目のためnullの場合は考慮しない 4animalCD IN /*animalCd*/('AA','BB') 5/*END*/ 6/*IF animalCd == "CC"*/ -- 「それ以外」が選択されている場合 7OR animalCD NOT IN ('AA','BB') 8/*END*/
起こっていること、聞きたいこと
animalCdをリストで保持しているからなのか、
/IF animalCd == "CC"/ /END/
のコメント部の条件判定がいつもfalseになり機能しません。
また、この質問を書いていて気が付いたのですが私がやりたいこととしては
条件を「animalCdに"CC"(それ以外)が含まれていた場合」としたいのです。
要は発行されるSQLとしては、「いぬ」「それ以外」が選択された場合
SQL
1select * from ANIMALTABLE 2where 3animalCD IN ('AA') 4OR 5animalCD NOT IN ('AA','BB')
…とされることを想定していました。
SQLファイル内でそんな条件を書くことは可能なのでしょうか。
可能でなければほかにどのようなやり方があるでしょうか。
また、SQLの組み立て方、仕様としてどうなのか?等々ありましたら
是非教えていただければ幸いです。
拙い文章でわかりにくく申し訳ありませんが、よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー