0

我需要这样的查询

select * from t where
field=ifnull(:param, field) 'it not work's

所以如果 param=NULL 我有

select * from t where field is NULL

但如果参数 =4 我有

select * from t where field=4
4

4 回答 4

3

您可以在 where 子句 AFAIK bot 不确定 MySQl 时使用这种情况,

但更好的方法是翻译它们,

您可以阅读有关SQL WHERE 子句的信息:避免 CASE,使用布尔逻辑

所以

select * from t where (:param is null and filed is null) or (filed = :param)
于 2010-12-31T09:05:51.577 回答
1

您可以尝试这种替代方法,这可能会对您有所帮助

 select * from t where (field = NULL AND param= NULL) OR field ='4'
于 2010-12-31T09:20:17.583 回答
0

我认为您正在寻找NULLIF而不是 ifnull

我认为更好的方法是在你的情况下在 where 子句中使用 CASE 。

于 2010-12-31T09:04:40.960 回答
0

使用 NULL 时,您不能使用算术运算符。尝试COALESCE以使值为 integer 或 NULL 的逻辑

mysql> SELECT COALESCE(NULL,1);
    -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
    -> NULL
于 2010-12-31T09:08:11.023 回答