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中查找如何执行)。