質問: JavaとSQLを使った検索機能を作成中です。 フォーム画面の検索項目(氏名、氏名カナ、趣味のテキストボックス)に入力された値をSQL文のwhere 句に指定したプレースホルダーに埋めていく形でテーブルに対して取得したデータを画面に検索結果として表示させる形で考えています。 仕様としてAND条件の形で検索し、検索項目は部分一致検索とします。加えて検索項目の個々に入力がなければ(空の場合)、その項目はレコードの絞りこみ対象として指定しない場合、どういうSQLを作成すれば良いでしょうか。SQL作成に悩んでいます。
回答: 前提として条件に対する検索の値はPreparedStatementなどを使うとして、そこで指定するSQL文の流れとしては以下のような流れになるのではないでしょうか。 条件の総数を確認 判断 指定がゼロ個である → WHERE句なし 判断 指定がひとつである → WHERE句を作成し条件を入れる 判断 指定がふたつ以上である → ひとつ目はWHERE句を作成し条件を入れる、ふたつ目からは AND条件を追加する。 入力の受け取り方によってコードの内容はfor文だったり配列へのアクセスだったりと変わると思うのですが、組み立てはあくまでも条件の総数に対して考えると良いかと思います。