sql - CASE return "true" 如果你比较 NULL 和 NULL?
sql - CASE return "true" if you compare NULL to NULL?
如果将 NULL
与 NULL
进行比较,DECODE
将 return "true"。 CASE
不会。
如果我将 NULL
与 NULL
进行比较,如何使 CASE
与 return 为真?
我当前查询的示例。一个问题是如果 a.name
是 null
并且 b.name
是 null
,那么它将 return 为假。我希望它的行为类似于 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;
您可以将表达式重写为 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
语法。
使用 NULL-safe equal 我们可以使用:
SELECT a.name <=> b.name
FROM Employee1 a
JOIN Employee2 b ON a.salary = b.salary;
NULL
与 NULL
进行比较,DECODE
将 return "true"。 CASE
不会。
如果我将 NULL
与 NULL
进行比较,如何使 CASE
与 return 为真?
我当前查询的示例。一个问题是如果 a.name
是 null
并且 b.name
是 null
,那么它将 return 为假。我希望它的行为类似于 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;
您可以将表达式重写为 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
语法。
使用 NULL-safe equal 我们可以使用:
SELECT a.name <=> b.name
FROM Employee1 a
JOIN Employee2 b ON a.salary = b.salary;