人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLについての質問です。(postgres の場合)
多数条件抽出するSQLで検索条件が未入力の場合は、検索条件を無視するようなSQLの書き方はありますでしょうか?

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

●質問者: disca
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:SQL 入力 抽出 検索
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●27ポイント

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

◎質問者からの返答

ありがとうございます。

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

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

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


2 ● samejima
●27ポイント

3値論理を巧みに利用した例

◎質問者からの返答

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


WHERE (user_id = ? OR ? IS NULL)


3 ● b-wind
●26ポイント
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となるということでしょうか?

(^^難しい。。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ