SQL: Дайте имена сотрудников, которые зарабатывают больше, чем их менеджер - PullRequest
0 голосов
/ 13 октября 2018
EMPNO   ENAME   JOB         MGR     HIREDATE    SAL     COMM    DEPTNO

7369    SMITH   CLERK       7902    2000-12-17  800     Null        20

7902    FORD    ANALYST     7566    1992-12-03  3000    Null        20

Привет, ребята, у меня есть этот тип таблицы, и мне нужно показать сотрудникам, которые зарабатывают больше, чем там менеджеры?Было бы проще, если бы у нас было 2 таблицы, но я не могу представить код в одной таблице.Есть идеи?

Ответы [ 2 ]

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

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

SELECT e1.EMPNO, e1.ENAME
FROM employee e1
JOIN employee mgr ON mgr.EMPNO = e1.MGR 
WHERE e1.SAL > mgr.SAL 
0 голосов
/ 13 октября 2018
  • Вы можете сделать «самостоятельное соединение» между двумя таблицами.Во второй таблице EMPNO будет равно соответствующему значению MGR.
  • Используйте Where для фильтрации случаев, когда зарплата сотрудника выше, чем у менеджера.

Попробуйте:

SELECT employee.*
FROM your_table_name AS employee
JOIN your_table_name AS manager ON manager.EMPNO = employee.MGR 
WHERE employee.SAL > manager.SAL 

Как @ Strawberry предлагает в комментариях , что сравнение столбцов может быть выполнено в самом условии соединения (вместо использованияWhere).Вы также можете сделать следующее:

SELECT employee.*
FROM your_table_name AS employee
JOIN your_table_name AS manager ON manager.EMPNO = employee.MGR AND 
                                   employee.SAL > manager.SAL 

Преимущество этого подхода состоит в том, что мы должны перейти от внутреннего соединения к левому соединению, изменения, необходимые для запроса, будут меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...