SQL Server从表中获取值并从同一表中获取联接值

时间:2018-08-15 22:11:20

标签: sql sql-server

在尝试弄清楚如何在自己的表上查询结果和联接数据时,我遇到了一些困难。

“我的雇员”表包含以下标题:

Employee_Nbr
First_Name
Last_name
Manager_Nbr
Email

例如,此“雇员”表包含诸如以下数据:

 1. 21 Mickey Mouse 10 mmouse@disney.com
 2. 5 Donald Duck 10 dduck@disney.com
 3. 8 Pluto Dog 21 pdog@disney.com
 4. 10 Walt Disney 0 wdisney@disney.com
 5. 0 El Presidente NULL president@disney.com

我如何编写一个可遍历表格的脚本,查询自身以匹配经理编号,并在查询结果的末尾附加经理的电子邮件地址,例如:

 1. 21 Mickey Mouse 10 mmouse@disney.com wdisney@disney.com
 2. 5 Donald Duck 10 dduck@disney.com wdisney@disney.com
 3. 8 Pluto Dog 21 pdog@disney.com mmouse@disney.com
 4. 10 Walt Disney 0 wdisney@disney.com president@disney.com
 5. 0 El Presidente *NULL* president@disney.com *NULL*

我不太关心最高经理。

我写了这个查询,但是它给了我一些非常奇怪的结果,例如给每位员工一行关于其经理所拥有的员工的结果:

SELECT 
    t1.Employee_Nbr, 
    t1.First_Name, 
    t1.Last_Name, 
    t1.Manager_Nbr, 
    t1.Email, 
    t2.Email AS Manager_Email
FROM 
    dbo.Employees t1
LEFT JOIN 
    dbo.Employees t2 on t2.Manager_Nbr = t1.Manager_Nbr

有人可以帮我解决我的查询吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

关闭时,只需在t1.Manager_Nbr条件下使用t1.Employee_Nbr而不是JOIN,因为t1是基表t2是Manager表,因此,获取管理员编号,而不是Employee_Nbr

SELECT t1.Employee_Nbr, 
t1.First_Name, 
t1.Last_Name, 
t1.Manager_Nbr, 
t1.Email, 
t2.Email AS Manager_Email
FROM dbo.Employees t1
LEFT JOIN dbo.Employees t2 on t2.Employee_Nbr = t1.Manager_Nbr

sqlfiddle