Самостоятельное объединение данных SQL Server - PullRequest
0 голосов
/ 27 мая 2018

У меня есть таблица Employee, которая содержит имя и идентификатор менеджера, поэтому я использую самосоединение, чтобы найти менеджера сотрудника.

Структура моей таблицы и данные таблицы:

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

Вывод:

enter image description here

Теперь, когда я использую этот запрос:

 SELECT e1.Name, e2.NAME AS 'mngrname'
 FROM Employee e1
 INNER JOIN Employee e2 ON e1.EmployeeID = e2.ManagerID

Я получаю данные как:

enter image description here

Теперь, когда я изменяю запрос на:

SELECT e1.Name, e2.NAME AS 'mngrname'
FROM Employee e1
INNER JOIN Employee e2 ON e1.ManagerID = e2.EmployeeID

Вывод:

enter image description here

Вопрос;почему это происходит?Почему данные меняются?

1 Ответ

0 голосов
/ 28 мая 2018
SELECT e1.Name, e2.NAME AS 'mngrname'
 FROM Employee e1
 INNER JOIN Employee e2 ON e1.EmployeeID = e2.ManagerID

Здесь вы найдете e1's manager. В соединении, поскольку обе таблицы одинаковы, так что это само объединение. В этом объединении псевдоним 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

...