【问题标题】:SQL Multiple Filter - Optimal WaySQL 多重过滤器 - 最佳方式
【发布时间】:2012-11-11 15:54:22
【问题描述】:

您如何以尽可能低的成本 (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

如果发现重复,请标记/更正此问题

【问题讨论】:

标签: sql sql-server-2008 query-optimization


【解决方案1】:

每当我做可选过滤器时,我都会选择一些代表所有数据的数据,然后使用类似这样的东西:

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)

【讨论】:

  • 你知道如何将其转换为 knexJS 吗?
【解决方案2】:

这会有帮助吗? @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)

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多