Sql server SQL Server中的自连接数据
我有一个表Sql server SQL Server中的自连接数据,sql-server,join,self-join,Sql Server,Join,Self Join,我有一个表Employee,其中包含姓名和经理id,因此我使用自联接查找员工的经理 我的表格结构和表格数据: CREATE TABLE Employee ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(50), ManagerID INT ) INSERT INTO Employee SELECT 1, 'Mike', 3 UNION ALL SELECT 2, 'David', 3 UNION A
Employee
,其中包含姓名和经理id,因此我使用自联接查找员工的经理
我的表格结构和表格数据:
CREATE TABLE Employee
(
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(50),
ManagerID INT
)
INSERT INTO Employee
SELECT 1, 'Mike', 3
UNION ALL
SELECT 2, 'David', 3
UNION ALL
SELECT 3, 'Roger', NULL
UNION ALL
SELECT 4, 'Mary', 2
UNION ALL
SELECT 5, 'Joseph',2
UNION ALL
SELECT 7, 'Ben',2
选择所有数据
SELECT *
FROM Employee
输出为:
现在,当我使用此查询时:
SELECT e1.Name, e2.NAME AS 'mngrname'
FROM Employee e1
INNER JOIN Employee e2 ON e1.EmployeeID = e2.ManagerID
我得到的数据如下:
现在,当我将查询更改为:
SELECT e1.Name, e2.NAME AS 'mngrname'
FROM Employee e1
INNER JOIN Employee e2 ON e1.ManagerID = e2.EmployeeID
输出为:
问题,;为什么会这样?为什么数据会发生变化
SELECT e1.Name, e2.NAME AS 'mngrname'
FROM Employee e1
INNER JOIN Employee e2 ON e1.EmployeeID = e2.ManagerID
这里您可以在join中找到e1的经理
。因为两个表相同,所以它是自联接。在这个联接中,别名e1
是Employee
表,e2
是manager
表
所以e1.Name
是Employee Name
和e2.Name
是manager
现在,还可以将别名e1设置为经理表,将别名e2设置为员工表。
在这种情况下,它们将产生相同的结果,但列名将包含不同的信息
SELECT e1.Name, e2.NAME AS 'mngrname'
FROM Employee e1
INNER JOIN Employee e2 ON e1.ManagerID = e2.EmployeeID
这里e1是经理表,e2是员工表
因此,
e1.Name
是manager Name
和e2.Name
是Employee
,因为这是一个不同的查询。这完全有道理——我不知道这里有什么可误解的——为什么你认为应该是一样的?