Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server 如何使用自引用外键获取表的列?_Sql Server - Fatal编程技术网

Sql server 如何使用自引用外键获取表的列?

Sql server 如何使用自引用外键获取表的列?,sql-server,Sql Server,我的表格结构如下所示: Id Name Sal ManagerId 1 a 5000 2 2 b 7000 3 3 c 6000 1 我需要这样的输出 Id Name Sal Manager 1 a 5000 b 2 b 7000 c 3 c 6000

我的表格结构如下所示:

Id      Name    Sal     ManagerId
1       a       5000       2
2       b       7000       3
3       c       6000       1
我需要这样的输出

Id     Name    Sal     Manager
1      a       5000      b
2      b       7000      c
3      c       6000      a

我如何才能做到这一点?

您必须使用self-
连接来将一个表链接到自身:

SELECT t1.Id, t1.Name, t1.Sal, t2.ManagerName AS Manager
FROM TableName t1 INNER JOIN TableName t2 
    ON t1.ManagerID = t2.Id
如果ManagerId可为空,则可能需要使用
外部联接

SELECT t1.Id, t1.Name, t1.Sal, COALESCE(t2.ManagerName, '<no manager>') AS Manager
FROM TableName t1 LEFT OUTER JOIN TableName t2 
    ON t1.ManagerID = t2.Id
选择t1.Id、t1.Name、t1.Sal、COALESCE(t2.ManagerName“”)作为管理器
从TableName t1左外部联接TableName t2
在t1.ManagerID=t2.Id上

@DavidG:你为什么这么认为?该表的主键似乎是
Id
ManagerId
似乎是另一个表的FK。但我不确定。@DavidG:你说得对,似乎有可能。我已经相应地编辑了我的答案。您可以按照下面的答案中的建议将表本身连接起来,或者,如果您只需要名称,您可以执行子查询,从
ManagerId
列值中检索管理器名称(要决定使用哪种解决方案,请对两者都执行解释计划-您必须在SqlServer中查找如何执行)。