根据 MySQL 中的条件忽略 WHERE 语句
Ignore the WHERE statement based on conditions in MySQL
假设我有一个包含一些列的 table,其中一列名为 col
。如果可能,我想在 SELECT
语句中应用以下过滤器。
- if
col = ""
THEN return 整个 table
- 否则 return 只有
col = the given value
的行
示例:
col output
10 9
9 8
0 10
如果我想根据第 col
列过滤结果,那么
我可以做一个简单的:
SELECT * FROM table
WHERE col = 10
我只会得到 col=10 的行。
但如果条件是 col = "
,我想得到完整的 table。
编辑:不幸的是,我不能使用SET
关键字来设置变量。
假设 "given value" 包含在用户变量或参数中:
WHERE @var = '' OR col = @var
WHERE :var = '' OR col = :var
WHERE ? = '' OR col = ?
如果您是 "building" 查询,您可以根据输入跳过 where 子句。
如果你不能把它放在一个变量中,'given value' 从哪里来?
它是否保留在另一行,table?如果是,您可以通过连接来做到这一点:
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
假设我有一个包含一些列的 table,其中一列名为 col
。如果可能,我想在 SELECT
语句中应用以下过滤器。
- if
col = ""
THEN return 整个 table - 否则 return 只有
col = the given value
的行
示例:
col output
10 9
9 8
0 10
如果我想根据第 col
列过滤结果,那么
我可以做一个简单的:
SELECT * FROM table
WHERE col = 10
我只会得到 col=10 的行。
但如果条件是 col = "
,我想得到完整的 table。
编辑:不幸的是,我不能使用SET
关键字来设置变量。
假设 "given value" 包含在用户变量或参数中:
WHERE @var = '' OR col = @var
WHERE :var = '' OR col = :var
WHERE ? = '' OR col = ?
如果您是 "building" 查询,您可以根据输入跳过 where 子句。
如果你不能把它放在一个变量中,'given value' 从哪里来?
它是否保留在另一行,table?如果是,您可以通过连接来做到这一点:
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