admin

只是移动列名后还不太了解查询

sql

这是我的表 tblEmployee ,当我尝试使用自我联接查询时,其结果在移动列时会有所不同,有人可以向我解释这两个查询之间的区别吗?

EmployeeID  Name    ManagerID
 1          Mike     3
 2          Rob      1
 3          Todd    NULL
 5          Ben      1
 6          Sam      1

查询_1

SELECT E.Name AS Employee, M.Name AS Manager
from tblEmployee E
LEFT JOIN tblEmployee M
on E.ManagerID = M.EmployeeID

输出

Employee    Manager
 Mike        Todd
 Rob         Mike
 Todd        NULL
 Ben         Mike
 Sam         Mike

QUERY_2

SELECT E.Name AS Employee, M.Name AS Manager
from tblEmployee E
LEFT JOIN tblEmployee M
on E.EmployeeID = M.ManagerID

输出

Employee  Manager
Mike       Rob
Mike       Ben
Mike       Sam
Rob        NULL
Todd       Mike
Ben        NULL
Sam        NULL

阅读 182

收藏
2021-06-07

共1个答案

admin

首先简单说明一下:左联接采用第一个表中的每一行,并且在所选列的第二个表中至少具有匹配项。

在第 一个查询中, 您正在考虑每一行的 Manager ID ,并在第二个表中查找 Employee ID 的匹配项:由于第二个表中的值(
Employee ID )是 (至少在示例定义中),因此,只能找到与该ID匹配的一行。

例如:第一行Mike的 Manager ID = 3,当您查看该表时,只有一行的 Employee ID = 3,即Todd

第二个查询中, 您正在考虑每一行的 Employee ID ,并在第二张表中查找 Manager ID
的匹配项:由于可能有不止一行具有相同 Manager ID的 行,因此您将为每一行获得更多的价值。

例如:第一行Mike的 员工ID 为1,当您查看该表时,您有三行 anager ID = 1,分别是Rob,Ben和Sam。

2021-06-07