Я изучаю операторы SQL, и я застрял в этом сценарии.
Проблема состоит в том, чтобы выбрать данные, которые имеют столбец ассоциации с другим в той же таблице, результат, который я хочу, - это выбрать «Имя сотрудника», «Подотчетен», «Имя вашего босса» (выбор имени, связанного с идентификатор сотрудника)
Я попытался выбрать в том же запросе столбцы, связанные с ними, но не сработал.
/*1*/
SELECT employeeNumber,firstName, (select firstname from employees where reportsTo = employeeNumber) as boss from employees;
/*2*/
SELECT e.firstName ,'Reports to' as 'Report', (SELECT e2.firstName from employees e2 where e.employeeNumber = e2.reportsTo) AS Boss
from employees e;
Оба провалились
я собираюсь






вам нужно изучить концепцию соединения и конкретный случай, когда вы можете соединить таблицу с самой собой следующим образом:
select
e1.employeeNumber
,e1.firstName
,e2.firstName as boss
from employees e1
join employees e2
on e1.reportsTo=e2.employeeNumber
@maSTAShuFu, ты прав, но я хотел, чтобы все было просто.
Используйте self-join
SELECT e1.employeeNumber,e1.firstName,
e2.firstname as boss
FROM employees e1
LEFT JOIN employees e2
ON e1.reportsTo = e2.employeeNumber;
ИСПОЛЬЗУЙТЕ LEFT САМОЕ ПРИСОЕДИНЕНИЕ, чтобы также включить главного босса
select
lower.employeeNumber
,lower.firstName
,higher.firstName as boss
from employees lower
left outer join employees higher
on higher.employeenumber = lower.reportsto
Да, это работает! спасибо, я прочитаю этот код и пойму магию, которую сделало левое внешнее соединение
Вы выполняете соединение таблицы с самой собой (вам не нужно использовать псевдоним в обеих таблицах, но я думаю, что это позволяет избежать путаницы)
Select a.employeeNumber,a.firstName, b.firstNameAs 'Boss' FROM employees As 'a' JOIN employees As 'b' WHERE a.reportsTo = b.employeeNumber
используйте
leftэто не будет включать главного босса