Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写SQL查询以获取同一表中的emp名称和管理器名称?_Sql_Sql Server - Fatal编程技术网

如何编写SQL查询以获取同一表中的emp名称和管理器名称?

如何编写SQL查询以获取同一表中的emp名称和管理器名称?,sql,sql-server,Sql,Sql Server,我有一个员工表: 其中EmpID是主键,ManagerID是外键 我想要这样的输出,如果管理器id为null,则显示No manager: 我写了这个查询 SELECT e1.EmpID, e1.EmpName, e1.ManagerID, ManagerName = CASE WHEN e1.ManagerID = NULL THEN 'No Manager' ELSE

我有一个员工表:

其中EmpID是主键,ManagerID是外键

我想要这样的输出,如果管理器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;
但是我得到了这个输出,我想要“无管理器”来代替NULL

请帮忙

提前感谢

不要使用!=用空!正确的语法应该是NOT NULL。但是,请使用内置函数COALESCE:

几乎任何对NULL的操作都返回NULL,包括=和。两个突出的异常是IS NULL和IS NOT NULL。

不要使用!=用空!正确的语法应该是NOT NULL。但是,请使用内置函数COALESCE:

几乎任何对NULL的操作都返回NULL,包括=和。两个突出的异常是IS NULL和NOT NULL

零均值未知

尝试使用IS NULL而不是=NULL

默认值为on

指定在SQL Server 2017中将Equals=和Not Equal作为比较运算符与空值一起使用时的ISO兼容行为

如果您想使用NULL=NULL,您可以更改设置,尽管我不建议这样做

这是一张设置ANSI_空值的表格

零均值未知

尝试使用IS NULL而不是=NULL

默认值为on

指定在SQL Server 2017中将Equals=和Not Equal作为比较运算符与空值一起使用时的ISO兼容行为

如果您想使用NULL=NULL,您可以更改设置,尽管我不建议这样做

这是一张设置ANSI_空值的表格


!= 无效的或者不是空的无效的或者不是空的?谢谢。它也起作用了,谢谢。它也起作用了。
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;
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;
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