私はそのようなクエリが必要です
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
where句のAFAIKボットがMySQlについて確信が持てない場合にケースを使用できます。
しかし、より良いアプローチはそれらを翻訳することです、
そのSQLWHERE句について読むことができます: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'
ifnullではなくNULLIFを探していると思います
あなたの場合、where句でCASEを使用するのがより良いアプローチだと思います。
NULLを使用する場合、算術演算子は使用できません。COALESCEを試して、値が整数またはNULLの場合に論理を作成してください
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL