2

请检查小提琴:myFiddle

询问:

create table Emp(empId int primary key, EmpName varchar(50),MngrID int)

insert into Emp(empId,EmpName,MngrID)values(1,'A',2)
insert into Emp(empId,EmpName,MngrID)values(2,'B',null)

A 有 mngr B 但 A 没有 mngr,因此在从查询中获取记录时,它会显示:

EmpId           EmpName     MngrName(alias MngrName)
 1                 A            B
 2                 B            null

如何使用查询获取上述数据?

4

3 回答 3

1

您需要 LEFT JOIN 表自身:

select A.empID, A.empName, b.empName as mgrName
from emp A left join emp B on  A.mngrID = b.empID

http://sqlfiddle.com/#!3/184dc/8

于 2013-10-08T19:34:27.373 回答
1

出于某种原因,它在 SQLFiddle 中不起作用,但我在自己的 SQL Server 实例中运行它以验证它是否有效:

SELECT  e1.EmpID, e1.EmpName, e2.EmpName
FROM  emp e1 LEFT OUTER JOIN emp e2 
ON e1.MngrID = e2.EmpID

基本上,您通过声明表的两个实例(e1 和 e2),然后将第一个实例的 MngrID 连接到第二个实例的 EmpID 来进行“自连接”。

于 2013-10-08T19:39:03.877 回答
0

select empId,EmpName,(SELECT EmpName FROM emp WHERE MngrID = amp1.MngrID) AS Manager from emp as amp1

于 2013-10-08T19:34:46.457 回答