Выберите в той же таблице - PullRequest
0 голосов
/ 30 апреля 2019

Я изучаю операторы SQL и застрял в этом сценарии.

Проблема состоит в том, чтобы выбрать данные, у которых есть столбец связывания с другим в той же таблице, в результате я хочу выбрать «Имя сотрудника», «Отчеты», «Имя вашего начальника» (выбор имени связывание с employeeId)

[1]: https://pasteboard.co/IcqUYbB.png

Я пытался выбрать в том же запросе столбцы, которые их ассоциировали, но не сработало.

/*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;

Оба не удалось

Я получаю

Ответы [ 4 ]

2 голосов
/ 30 апреля 2019

ИСПОЛЬЗОВАНИЕ LEFT САМ СОЕДИНЯЙТЕСЬ, чтобы также включить Главного Босса

select 
lower.employeeNumber
,lower.firstName
,higher.firstName as boss
from employees lower
left outer join employees higher
   on higher.employeenumber = lower.reportsto
0 голосов
/ 30 апреля 2019

Вы делаете соединение таблицы с самим собой (вам не нужно использовать псевдоним в обеих таблицах, но я думаю, что это позволяет избежать путаницы)

Select a.employeeNumber,a.firstName, b.firstNameAs 'Boss' FROM employees As 'a' JOIN employees As 'b'  WHERE a.reportsTo = b.employeeNumber 
0 голосов
/ 30 апреля 2019

Используйте self-join

SELECT e1.employeeNumber,e1.firstName, 
       e2.firstname as boss 
  FROM employees e1
  LEFT JOIN employees e2 
    ON e1.reportsTo = e2.employeeNumber;
0 голосов
/ 30 апреля 2019

вам нужно изучить концепцию соединения и конкретный случай, когда вы можете присоединить таблицу к себе, как это:

select 
 e1.employeeNumber
,e1.firstName
,e2.firstName as boss
from employees e1
join employees e2
on e1.reportsTo=e2.employeeNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...