【问题标题】:SQL - How do you perform a comparison as a result of a CASE statement?SQL - 您如何根据 CASE 语句执行比较?
【发布时间】:2013-11-01 14:37:49
【问题描述】:

我有一个带有WHEREclause 的 SQL 查询,其中包含多个由AND 连接的条件

我想做以下检查:

WHERE something AND WHERE x <> y

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

也就是说,如果 x 不是NULL,那么我想将x &lt;&gt; y 添加到WHERE 子句中 以下代码不起作用-我不知道这是一个小语法问题还是不支持逻辑。如果不是,是否有人对替代解决方案有任何想法?

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

【问题讨论】:

  • 您使用的是什么 DBMS?

标签: sql case conditional-statements where


【解决方案1】:

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

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

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

【讨论】:

  • 刚刚意识到我在 2013 年从未接受过这个。再次感谢。我不知道我当时在想什么。我想很容易专注于一条道路而看不到简单的解决方案。
【解决方案2】:
WHERE something AND coalesce(x,'some non-y value') <> y

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

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多