SQL Server 关于语句自连接

lmvvr0a8  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(121)

在执行自连接时,我很难理解on语句。假设我们有以下表格:
| 雇员id|姓名|管理员ID|薪金|
| - ------|- ------|- ------|- ------|
| 1个|迈克|三个|三万五千|
| 第二章|罗伯|1个|四万五千|
| 三个|托德|零|二万五千|
| 四个|本|1个|五万五千|
| 五个|山姆|1个|六万五千|
我想执行一个自联接以返回员工姓名及其经理姓名。
当我执行以下自联接时,得到了不正确的结果:

SELECT E.name as Employee,M.name as Manager
FROM tblEmployees E
LEFT JOIN tblEmployees M
ON E.Employeeid=M.managerid

但是,当我使用下面的查询反转on语句中的列时:

SELECT E.name as Employee,M.name as Manager
FROM tblEmployees E
LEFT JOIN tblEmployees M
ON E.managerid=M.Employeeid

我得到了正确答案。
为什么?我怎么知道在on语句中选择哪些列?

5lhxktic

5lhxktic1#

以下是我的解释:
1.您所拥有的表的结构是每行代表公司中的一个雇员。
1.您感兴趣的是确定谁是每个员工的经理。
1.您可以通过联接表本身来发现这一点,其中查找值是经理ID(managerid),引用列是雇员ID(employeeid)。
1.第一个查询是错误的,因为employeeid列用于查找值,而managerid列用于引用。
1.若要获取需要查找的每个员工的经理,请将managerid列用作查找列,将employeeid列用作引用列。
希望不会太混乱!

相关问题