根据MySQL中的条件忽略WHERE语句

时间:2018-10-11 20:14:41

标签: mysql sql where

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

  • 如果col = ""然后返回整个表格
  • 否则仅返回col = the given value
  • 处的行

示例:

col output

10     9
 9     8
 0    10

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

SELECT * FROM table
WHERE col = 10

我只会得到col = 10的行。

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

编辑:很遗憾,我无法使用SET关键字设置变量。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

如果您不能将“给定值”放在变量中,它从哪里来?

它是否保存在另一个单行表中?如果是这样,您可以通过联接来实现:

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