7

最小限のコスト (SQL) でこの単純なシナリオをどのように実装しますか?

(適用されるフィルタのすべての組み合わせをサポートするストアド プロシージャを実装します。 )

Table

    name | dateOfbirth | phone | email
     N1  | 01-01-1992  | P1    | E1
     N2  | 12-08-1976  | P2    | E2
     N3  | 09-11-1989  | P3    | E3
     N4  | 04-06-1991  | P4    | E4

    Filter 
    [x] Name
    [x] dateOfbirth 
    [x] phone
    [x] email

長年にわたり、さまざまな方法で実装された SQL クエリとフィルターを見た後。

今こそリフレッシュする時だと思います。

参考文献

  1. http://bit.ly/RYHzaF

  2. http://bit.ly/QyX103

重複として見つかった場合は、この質問をマーク/修正してください

4

2 に答える 2

9

オプションのフィルターを実行するときは常に、すべてのデータを表すデータを選択してから、次のようなものを使用します。

SELECT name, dateOfbirth, phone, email
  FROM Table
 WHERE (@a_name  = '' or name = @a_name)
   AND (@a_date  = '1900-01-01' or dateOfbirth = @a_date)
   AND (@a_phone = '' or phone = @a_phone)
   AND (@a_email = '' or email = @a_email)
于 2012-11-23T10:09:44.490 に答える
4

これは役に立ちますか?@f1,...,@f4 are filters and assuming null if filtering not needed

SELECT name, dateOfBirth, phone, email
FROM YourTable
WHERE name = ISNULL(@f1,name) AND dateOfBirth = ISNULL(@f2,dateOfBirth) AND
      phone = ISNULL(@f3,phone) AND email = ISNULL(@f4,email)
于 2012-11-23T10:02:17.440 に答える