Выбрать в той же таблице

Я изучаю операторы 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;

Оба провалились

я собираюсь

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
66
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

select 
 e1.employeeNumber
,e1.firstName
,e2.firstName as boss
from employees e1
join employees e2
on e1.reportsTo=e2.employeeNumber

используйте left это не будет включать главного босса

RoMEoMusTDiE 29.04.2019 23:36

@maSTAShuFu, ты прав, но я хотел, чтобы все было просто.

AlexYes 29.04.2019 23:37

Используйте 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

Да, это работает! спасибо, я прочитаю этот код и пойму магию, которую сделало левое внешнее соединение

Renan Duarte 29.04.2019 23:43

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

Select a.employeeNumber,a.firstName, b.firstNameAs 'Boss' FROM employees As 'a' JOIN employees As 'b'  WHERE a.reportsTo = b.employeeNumber 

Другие вопросы по теме