【问题标题】:sql - CASE return "true" if you compare NULL to NULL?sql - 如果将 NULL 与 NULL 进行比较,CASE 返回“true”?
【发布时间】:2020-01-06 23:15:28
【问题描述】:

如果您将NULLNULL 进行比较,DECODE 将返回“true”。 CASE 不会。

如果我将NULLNULL 进行比较,如何使CASE 返回true?

我当前查询的示例。一个问题是如果a.namenullb.namenull,那么它将返回false。我希望它的行为类似于 oracle sql 中的 DECODE 函数。

SELECT CASE a.name
    WHEN b.name THEN 1
    ELSE 0
END,
FROM Employee1 a, Employee2 b 
WHERE a.salary = b.salary;

【问题讨论】:

  • 您已标记 MySQL 和 Oracle。这是两种不同的 RDBMS,您要问的是哪一种?

标签: mysql sql oracle sql-null


【解决方案1】:

使用NULL-safe equal我们可以使用:

SELECT a.name <=> b.name
FROM Employee1 a
JOIN Employee2 b ON a.salary = b.salary;

【讨论】:

    【解决方案2】:

    您可以将表达式重写为 CASE 的另一种形式,并同时测试两个 NULL 值:

    SELECT CASE WHEN a.name IS NULL AND b.name IS NULL OR a.name = b.name THEN 1
                ELSE 0
           END
    FROM Employee1 a
    JOIN Employee2 b ON a.salary = b.salary;
    

    请注意,我已将查询重写为使用现代 JOIN 语法。

    【讨论】:

    • 谢谢,我正在寻找的答案!
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2012-07-24
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多