我需要这样的查询
select * from t where
field=ifnull(:param, field) 'it not work's
所以如果param = NULL我有
select * from t where field is NULL
但如果param = 4 我有
select * from t where field=4
答案 0 :(得分:3)
您可以在where子句中使用案例AFAIK bot不确定MySQl,
但更好的方法是翻译它们,
你可以阅读SQL WHERE clauses: Avoid CASE, use Boolean logic
所以
select * from t where (:param is null and filed is null) or (filed = :param)
答案 1 :(得分:1)
您可以尝试这种替代方案 这可能对你有帮助
select * from t where (field = NULL AND param= NULL) OR field ='4'
答案 2 :(得分:0)
我认为您正在寻找NULLIF而不是ifnull
我认为更好的方法是在你的情况下在where子句中使用CASE。
答案 3 :(得分:0)
使用NULL时,不能使用算术运算符。尝试使用COALESCE来生成逻辑if,其值为integer或NULL
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL