我有一个WHERE
带有多个条件的子句的 SQL 查询AND
我想做以下检查:
WHERE something AND WHERE x <> y
但只有当 x 不是某个值时的第二个子句(在我的情况下为 NULL)
也就是说,如果 x is not ,NULL
那么我想x <> y
将 WHERE
如果不是,是否有人对替代解决方案有任何想法?
WHERE something AND (CASE WHEN x IS NOT NULL THEN x <> y)
我有一个WHERE
带有多个条件的子句的 SQL 查询AND
我想做以下检查:
WHERE something AND WHERE x <> y
但只有当 x 不是某个值时的第二个子句(在我的情况下为 NULL)
也就是说,如果 x is not ,NULL
那么我想x <> y
将 WHERE
如果不是,是否有人对替代解决方案有任何想法?
WHERE something AND (CASE WHEN x IS NOT NULL THEN x <> y)
这个你想多了。只需使用布尔逻辑:
WHERE something AND (x IS NULL OR x <> y)
CASE
是一个表达式,必须返回一个值。而且在大多数数据库系统上,评估谓词的结果在 SQL 类型系统中不表示为值,因此它不能是 a 返回的值CASE
。
WHERE something AND coalesce(x,'some non-y value') <> y
如果您能找到一个您知道永远不会匹配y
任何行的常量值,则此方法效果最佳。如果不能,则必须使用表达式来修改 y,这样会比较慢。