SQLについての質問です。(postgres の場合)

多数条件抽出するSQLで検索条件が未入力の場合は、検索条件を無視するようなSQLの書き方はありますでしょうか?

http://www.accessclub.jp/bbs3/0300/superbeg91767.html

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/06/07 17:52:47
  • 終了:2007/06/14 17:55:04

回答(3件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012007/06/07 19:10:23

ポイント27pt

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

id:disca

ありがとうございます。

現在PHPで検索条件が未入力のものに対し、

条件分岐等を行っていますが、

それをもっと簡略化させたいと考えています。

2007/06/07 21:06:56
id:samejima No.2

samejima回答回数92ベストアンサー獲得回数82007/06/07 20:16:14

id:disca

ばっちりです!ありがとうございます。


WHERE (user_id = ? OR ? IS NULL)

2007/06/08 09:23:44
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402007/06/07 23:08:16

ポイント26pt
SELECT * FROM table WHERE ( ? IS NULL OR col = ? ) ;

一つ目の?と2つ目の?には同じ検索条件の値を入れます。

そうすることで検索条件がない(値がNULL)の時は OR の左辺が評価され、検索条件がある(値がNULL以外)の時は OR の右辺が評価されます。

検索条件を2つづつ投入しなければならないので、面倒ですがフロントエンドの言語は問わずに SQL のみで解決できます。

人力検索はてな

id:disca

ばっちりです!

ただし、

?がNULLの場合、

(左辺):NULL IS NULL の結果は:TRUE

(右辺)col = NULL の結果は:NULL

そして上記の結果の論理和として

TRUE OR NULL なので

最終的にTRUEとなるということでしょうか?

(^^難しい。。。

2007/06/08 09:28:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません