SQL - 如何通过CASE语句执行比较?

时间:2013-11-01 14:37:49

标签: sql case conditional-statements where

我有一个带有WHERE子句的SQL查询,其中多个条件由AND加入

我想做以下检查:

WHERE something AND WHERE x <> y

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

换句话说,如果x不是NULL,那么我想将x <> y添加到WHERE子句 以下代码不起作用 - 我不知道它是一个小的语法问题还是不支持逻辑。如果不是,是否有人对替代解决方案有任何想法?

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

2 个答案:

答案 0 :(得分:1)

你已经过度思考了这一点。只需使用布尔逻辑:

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

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

答案 1 :(得分:0)

WHERE something AND coalesce(x,'some non-y value') <> y

如果你能找到一个你知道永远不会与任何行y匹配的常量值,那么这种方法效果最好。如果不能,则必须使用表达式来修改y,这样会更慢。