sql-server - 自联接数据变化 SQL Server
问题描述
我有一个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
在这里您可以找到e1's manager
.In join,因为两个表都相同,所以它是 Self join。在此连接中,别名e1
是Employee
table 并且e2
是manager
table。
现在和现在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
推荐阅读
- css - 部分 Blueprint.css 外观演练在哪里?
- c# - 在不破坏抽象的情况下使日志记录可用的设计模式
- azure - AKS 群集托管标识中的 Nginx 服务无权读取 publicIPAddresses
- c# - 如何向 C# 9 记录添加注释
- python - 无法在 PyCharm 中导入 arcpy
- html - 响应式登录/注册/信息/关于页面未正确调整大小
- reactjs - React 钩子中的状态不会立即改变
- java - Jda discord bot 托管 heroku 问题
- java - Azure Monitor 应用程序启动/停止时间
- selenium - 保持浏览器窗口打开并重用 - Codeception Selenium Chrome Debian