我有一个Employee
表:
其中EmpID
是主键,而ManagerID是外键。
我想要这样的输出,如果manager id为null,则显示“ No Manager”:
我写了这个查询
SELECT
e1.EmpID,
e1.EmpName,
e1.ManagerID,
ManagerName = CASE
WHEN e1.ManagerID = NULL THEN 'No Manager'
ELSE e2.EmpName
END
FROM
Emp e1
LEFT JOIN
Emp e2 ON e1.ManagerID = e2.EmpID;
但是我得到这个输出,我想要'No Manager'代替NULL
请帮助
预先感谢
答案 0 :(得分:3)
请勿将!=
与NULL
一起使用!正确的语法为IS NOT NULL
。但是,请使用内置函数COALESCE()
:
SELECT e1.EmpID, e1.EmpName, e1.ManagerID,
ManagerName = COALESCE(e2.EmpName, 'No Manager')
FROM Emp e1 LEFT JOIN
Emp e2
ON e1.ManagerID = e2.EmpID;
NULL
上的几乎所有操作都会返回NULL
,包括=
和<>
。 IS NULL
和IS NOT NULL
是两个突出的例外。
答案 1 :(得分:1)
NULL
表示未知
尝试使用IS NULL
代替= NULL
SELECT
e1.EmpID,
e1.EmpName,
e1.ManagerID,
ManagerName = CASE WHEN e1.ManagerID IS NULL THEN 'No Manager'
ELSE e2.EmpName
END
FROM Emp e1 LEFT JOIN Emp e2 ON e1.ManagerID = e2.EmpID;
注意
SET ANSI_NULLS的默认设置为
指定在SQL Server 2017中将等于(=)和不等于(<>)比较运算符与空值一起使用时符合ISO的行为。
如果您想使用NULL = NULL
,则可以更改设置,尽管我不建议这样做。
这是SET ANSI_NULLS
的表
Boolean Expression SET ANSI_NULLS ON SET ANSI_NULLS OFF
NULL = NULL UNKNOWN TRUE
1 = NULL UNKNOWN FALSE
NULL <> NULL UNKNOWN FALSE
1 <> NULL UNKNOWN TRUE
NULL > NULL UNKNOWN UNKNOWN
1 > NULL UNKNOWN UNKNOWN
NULL IS NULL TRUE TRUE
1 IS NULL FALSE FALSE
NULL IS NOT NULL FALSE FALSE
1 IS NOT NULL TRUE TRUE