多数条件抽出するSQLで検索条件が未入力の場合は、検索条件を無視するようなSQLの書き方はありますでしょうか?
http://www.accessclub.jp/bbs3/0300/superbeg91767.html
Accessは
(1)ユーザーインターフェース部分
フォーム、レポート
(2)データベース管理部分(データベースエンジンと呼びます)
テーブル、クエリ
(3)制御部分
マクロ、VBA
などが一体となってパッケージングされていて
お示しのページにある方法は制御部分(上記3)での対応となっておりSQL(上記2)による対応ではありません。
↓
それはつまりフォームの内容に応じてSQLを毎回作っているという事です。
↓
SQL1本でやってやれない事はないと思いますがデータベースエンジンに複雑な処理をさせるよりも
エンジンに渡すSQLを毎回生成してやるほうが手間も動作時間も少なくて済むのでSQLで対処する人は稀でしょう。
↓
PostgreSQLの場合はphpやPerlなどでインターフェースを造る場合が多いと思いますが
通常はインターフェースを受け持つ側で最適なSQLを生成してPostgreSQLに投げるという形にします。
↓
ユーザーインターフェース部分にどのような言語を用いているか存じませんが
if や switchといった条件分岐用のステートメントがあるはずですから
ご自身でお示しのページにあるような構文でSQL文を生成することを考えてみて下さい。
URL必須という事でphp のswitchマニュアルページです。
http://php.benscom.com/manual/ja/control-structures.switch.php
SELECT * FROM table WHERE ( ? IS NULL OR col = ? ) ;
一つ目の?と2つ目の?には同じ検索条件の値を入れます。
そうすることで検索条件がない(値がNULL)の時は OR の左辺が評価され、検索条件がある(値がNULL以外)の時は OR の右辺が評価されます。
検索条件を2つづつ投入しなければならないので、面倒ですがフロントエンドの言語は問わずに SQL のみで解決できます。
ばっちりです!
ただし、
?がNULLの場合、
(左辺):NULL IS NULL の結果は:TRUE
(右辺)col = NULL の結果は:NULL
そして上記の結果の論理和として
TRUE OR NULL なので
最終的にTRUEとなるということでしょうか?
(^^難しい。。。
ありがとうございます。
現在PHPで検索条件が未入力のものに対し、
条件分岐等を行っていますが、
それをもっと簡略化させたいと考えています。