【问题标题】:Ignore the WHERE statement based on conditions in MySQLMySQL中根据条件忽略WHERE语句
【发布时间】:2018-10-11 20:14:40
【问题描述】:

假设我有一个包含一些列的表,其中一列名为col。如果可能,我想在 SELECT 语句中应用以下过滤器。

  • if col = "" THEN 返回整个表
  • 否则只返回col = the given value所在的行

例子:

col output

10     9
 9     8
 0    10

如果我想根据列col 过滤结果,那么 我可以做一个简单的:

SELECT * FROM table
WHERE col = 10

我只会得到 col=10 的行。

但如果条件是col = ",我想获得完整的表格。

编辑:很遗憾,我不能使用SET 关键字来设置变量。

【问题讨论】:

  • col = ""?您的意思是如果给定值 = ""
  • @SalmanA 没错,是的!
  • col 与您要返回的表在不同的表中吗?这必须是单个查询吗?你能改用简单的if 条件吗?
  • 您能否向我们展示一个示例架构、数据和您的预期结果?

标签: mysql sql where


【解决方案1】:

假设“给定值”包含在用户变量或参数中:

WHERE @var = '' OR col = @var
WHERE :var = '' OR col = :var
WHERE ? = '' OR col = ?

如果您以某种方式“构建”查询,您可以简单地根据输入跳过 where 子句。

【讨论】:

  • 感谢您的回答,不使用SET 命令有什么更通用的吗?
  • 您忘记提及给定值(您的问题中为 10)的来源!
  • 用户定义给定值,例如通过一些 UI (API)。
【解决方案2】:

如果不能将“给定值”放入变量中,它从何而来?

它是否保存在另一个单行表上?如果是,您可以通过连接来执行此操作:

select m.* from maintable m
join giventable g on 1=1
where g.givenvalue=''
or m.col=g.givenvalue

还是作为参数传递给存储过程或函数?如果是这样,您几乎可以使用第一个答案中的语法:

select * from maintable m
where param1=''
or m.col=param1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2020-01-28
    • 1970-01-01
    • 2012-07-15
    • 2016-02-09
    相关资源
    最近更新 更多