0

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

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
4

4 に答える 4

3

where句のAFAIKボットがMySQlについて確信が持てない場合にケースを使用できます。

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

そのSQLWHERE句について読むことができます:CASEを避け、ブール論理を使用します

それで

select * from t where (:param is null and filed is null) or (filed = :param)
于 2010-12-31T09:05:51.577 に答える
1

あなたはこの代替案を試すことができますこれはあなたを助けるかもしれません

 select * from t where (field = NULL AND param= NULL) OR field ='4'
于 2010-12-31T09:20:17.583 に答える
0

ifnullではなくNULLIFを探していると思います

あなたの場合、where句でCASEを使用するのがより良いアプローチだと思います。

于 2010-12-31T09:04:40.960 に答える
0

NULLを使用する場合、算術演算子は使用できません。COALESCEを試して、値が整数またはNULLの場合に論理を作成してください

mysql> SELECT COALESCE(NULL,1);
    -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
    -> NULL
于 2010-12-31T09:08:11.023 に答える