(MySQL) Как объединить два столбца в одну таблицу и отобразить результаты? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть одна таблица, в которой есть столбцы employeeNumber, а также reportsTo, как вы можете видеть на скриншоте.Каждое имя подчиняется другому имени.Как employeeNumber 1165 reportsTo 1143.

Как я могу отображать в результатах каждого firstName и lastName сотрудника, а также firstName и lastName его "босса"?

Iнадеюсь, что вы меня понимаете.

image

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Вы можете попробовать это:

SELECT e.firstName, e.lastName, b.firstName, b.lastName
FROM employees as e
LEFT JOIN employees as b on b.employeeNumber = e.reportsTo;
  1. Вы выбираете firtName и lastName каждого сотрудника
  2. Вы выбираете firstName и lastName своего начальника
  3. Используя левуюобъединение должно возвращать некоторое значение NULL для босса, который никому не сообщает
  4. Я сделал объединение на b.employeeNumber = e.reportsTo, поэтому вы получите информацию о боссе из employeeNumber, куда направляется отчет сотрудника (например, сотрудник 1056 сообщает сотруднику 1002Таким образом, данные о сотрудниках - это Паттерсон Мэри, и он сообщает сотруднику Мерфи Диане, ее боссу)

РЕДАКТИРОВАТЬ:

После прочтения ответа Хамзы Хайдера о SELF JOIN (название того, что я делал ранее с объединением в той же таблице). Я нахожу другой вопрос, где ответ выглядит так, как вы хотите, и он даст вам некоторую информацию, чтобы понять, как работает SELF JOIN: Что такое SELFПРИСОЕДИНЯЙТЕСЬ, и когда бы вы использовали его?

Согласно ответу, есть другое решение:

SELECT 
    e1.FirstName, 
    e1.LastName,
    e2.FirstName as SupervisorFirstName, 
    e2.LastName as SupervisorLastName
FROM employee e1
LEFT OUTER JOIN employee e2 on e2.employeeNumber = e1.reportsTo

Разница в LEFT OUTER JOIN, а не LEFT JOIN, ноониОба они одинаковы ( Являются ли левые внешние соединения и левые соединения одинаковыми? )

0 голосов
/ 23 октября 2018

Вам нужно использовать самостоятельное соединение. Самостоятельное соединение

select * from Employees AS Employees1  join Employees  as Employees2 ON Employees1.employeeNumber = Employees2.reportsTo
0 голосов
/ 23 октября 2018

попробуй с этим.Он будет возвращать только те, которые имеют значение reportsTo (не нулевое значение).

SELECT 
    e.firstName,
    e.lastName,
    r.firstName AS bossFirstName,
    r.lastName AS bossLastName
FROM employees AS e
INNER JOIN employees AS r ON e.employeeNumber = r.reportsTo;

Если вы хотите видеть каждого сотрудника, даже если у него нет значения reportsTo, вы можете использовать LEFT JOIN:

SELECT 
    e.firstName,
    e.lastName,
    r.firstName AS bossFirstName,
    r.lastName AS bossLastName
FROM employees AS e
LEFT JOIN employees AS r ON e.employeeNumber = r.reportsTo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...