假设我有一个包含一些列的表,一列名为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
关键字来设置变量。
假设“给定值”包含在用户变量或参数中:
WHERE @var = '' OR col = @var
WHERE :var = '' OR col = :var
WHERE ? = '' OR col = ?
如果您以某种方式“构建”查询,则可以根据输入跳过where子句。
如果你不能把它放在一个变量中,'给定值'来自哪里?
它是否保存在另一个单行表中?如果是,您可以使用连接执行此操作:
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