【发布时间】:2011-06-01 22:20:48
【问题描述】:
我需要这样的查询
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
【问题讨论】:
我需要这样的查询
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 clauses: Avoid CASE, use Boolean logic
所以
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'
【讨论】:
使用 NULL 时,您不能使用算术运算符。尝试COALESCE 使值是整数或 NULL 的逻辑逻辑
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
【讨论】:
我认为您正在寻找 NULLIF 而不是 ifnull
我认为更好的方法是在你的情况下在 where 子句中使用 CASE。
【讨论】: