【问题标题】:Select with multi condition in SQL [duplicate]在SQL中选择多条件[重复]
【发布时间】:2016-05-10 22:58:11
【问题描述】:

我想在 SQL 中搜索具有多个条件的 student,例如:nameage。但是我们可能只有 name 或只有 age 值,或者我们可能拥有来自 user 的信息的所有值。我使用HTML 中的表单来获取值。如果他们没有填写所有文本字段,我不知道如何编写查询来选择。

如果我只有名称值,则查询是

SELECT * FROM stuTBL WHERE name = @name

如果我只有age 值,则查询是

SELECT * FROM stuTBL WHERE age = @age

如果我有所有值,则查询是

SELECT * FROM stuTBL WHERE name = @name AND age = @age

但是什么查询将涵盖任何用户输入?

【问题讨论】:

  • 您可以使用LIKE 而不是=(需要转义%_)并且当您对% 中的内容没有价值时(尽管其他解决方案可能会更好,除非你想要更多的控制)。
  • 通常:WHERE (age = @age or @age is null) ...

标签: sql


【解决方案1】:

检查 @name = ''@age = '' 以及条件。如果@name 为空,它将仅检查年龄条件。如果@age 为空,它将仅检查名称条件。

如果两个参数都有有效数据,那么这两个条件都会起作用

SELECT * 
FROM stuTBL 
WHERE (name = @name OR ISNULL(@name, '') = '')
      AND (age = @age OR ISNULL(@age, '') = '')

【讨论】:

  • 当存在或不存在用户名和年龄时给出结果,但在缺少年龄时不给出结果
  • @WasiqMuhammad :如果年龄值为空或空,ISNULL(@age, '') = '' 为真。所以很明显它会返回与name条件相关的数据
  • @WasiqMuhammad 取决于 @age 缺失时使用的值。
  • 你不能简单地阅读WHERE name = ISNULL(@name, name) AND age = ISNULL(@age, age)
  • @austin wernli 你是对的,谢谢大家
【解决方案2】:

试试这个

SELECT * 
CASE name
    WHEN name = (@name OR @name = '')
CASE age 
    WHEN age = (@age OR @age = '')
END
FROM stuTBL

【讨论】:

  • 实际上是否存在不会导致语法错误的 RDBMS?
  • @TabAlleman 是否有任何语言有效?
【解决方案3】:

@austin wernli 评论是一个答案,我找到了另一种使用方法

从 stuTBL WHERE 中选择 * (名称 = @name 或 @name 为空) AND(年龄 = @age 或 @age 为空)

【讨论】:

  • @name = null 不起作用,你应该使用@name is null
  • @Arulkumar 谢谢,你是对的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多