0

我有一个WHERE带有多个条件的子句的 SQL 查询AND

我想做以下检查:

WHERE something AND WHERE x <> y

但只有当 x 不是某个值时的第二个子句(在我的情况下为 NULL)

也就是说,如果 x is not ,NULL那么我想x <> yWHERE如果不是,是否有人对替代解决方案有任何想法?

WHERE something AND (CASE WHEN x IS NOT NULL THEN x <> y)
4

2 回答 2

1

这个你想多了。只需使用布尔逻辑:

WHERE something AND (x IS NULL OR x <> y)

CASE是一个表达式,必须返回一个值。而且在大多数数据库系统上,评估谓词的结果在 SQL 类型系统中不表示为值,因此它不能是 a 返回的值CASE

于 2013-11-01T14:39:30.090 回答
0
WHERE something AND coalesce(x,'some non-y value') <> y

如果您能找到一个您知道永远不会匹配y任何行的常量值,则此方法效果最佳。如果不能,则必须使用表达式来修改 y,这样会比较慢。

于 2013-11-01T14:39:38.743 回答