我需要这样的查询
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
您可以在 where 子句 AFAIK bot 不确定 MySQl 时使用这种情况,
但更好的方法是翻译它们,
您可以阅读有关SQL WHERE 子句的信息:避免 CASE,使用布尔逻辑
所以
select * from t where (:param is null and filed is null) or (filed = :param)
您可以尝试这种替代方法,这可能会对您有所帮助
select * from t where (field = NULL AND param= NULL) OR field ='4'
我认为您正在寻找NULLIF而不是 ifnull
我认为更好的方法是在你的情况下在 where 子句中使用 CASE 。
使用 NULL 时,您不能使用算术运算符。尝试COALESCE以使值为 integer 或 NULL 的逻辑
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL