質問

そのようなクエリが必要です

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
役に立ちましたか?

解決

MySQLについて条項がわからない場合は、ケースを使用できます。

しかし、より良いアプローチはそれらを翻訳することです、

あなたはそれについて読むことができます sql Where clauses:ケースを避け、ブールロジックを使用します

それで

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を使用する場合、算術演算子を使用することはできません。試す 合体 値を整理またはnullで論理的にするには

mysql> SELECT COALESCE(NULL,1);
    -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
    -> NULL

私はあなたが探していると思います nullif ifnullの代わりに

より良いアプローチは、あなたの場合の条項でケースを使用することだと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top