Одинаковые выходные данные приходят из запроса, где ожидаются различные выходные данные - PullRequest
0 голосов
/ 13 апреля 2020

Я использую свое время простоя, чтобы выучить SQL (Postgres), так как я довольно плох в этом. Я ценю терпение и руководство.

У меня есть две таблицы, сотрудник таблицы:

  fname   | minit |  lname  |    ssn    |   bdate    |         address         | sex |  salary  | super_ssn | dno 
----------+-------+---------+-----------+------------+-------------------------+-----+----------+-----------+-----
 James    | E     | Borg    | 888665555 | 1937-11-10 | 450 Stone, Houston TX   | M   | 55000.00 |           |   1
 John     | B     | Smith   | 123456789 | 1965-01-09 | 731 Fondren, Houston TX | M   | 30000.00 | 333445555 |   5
 Franklin | T     | Wong    | 333445555 | 1955-12-08 | 638 Voss, Houston TX    | M   | 40000.00 | 888665555 |   5
 Alicia   | J     | Zelaya  | 999887777 | 1968-01-19 | 3321 Castle, Spring TX  | F   | 25000.00 | 987654321 |   4
 Jennifer | S     | Wallace | 987654321 | 1941-06-20 | 291 Berry, Bellaire TX  | F   | 43000.00 | 888665555 |   4
 Ramesh   | K     | Narayan | 666884444 | 1962-09-15 | 975 Fire Oak, Humble TX | M   | 38000.00 | 333445555 |   5
 Joyce    | A     | English | 453453453 | 1972-07-31 | 5631 Rice, Houston TX   | F   | 25000.00 | 333445555 |   5
 Ahmad    | V     | Jabbar  | 987987987 | 1969-03-29 | 980 Dallas, Houston TX  | M   | 25000.00 | 987654321 |   4

И отдел таблиц:

     dname      | dnumber |  mgr_ssn  | mgr_start  
----------------+---------+-----------+------------
 Research       |       5 | 333445555 | 1988-05-22
 Administration |       4 | 987654321 | 1995-01-01
 Headquarters   |       1 | 888665555 | 1981-06-19

Я понял (в основном) о том, как присоединяется к работе, но я застрял в самостоятельном присоединении.

Мне нужно было вернуть представление, в котором были указаны имя сотрудника, имя руководителя и зарплата сотрудника для каждого сотрудника, работающего в «Исследованиях». отдел.

Когда я попробовал свои силы в самосоединениях, я делаю что-то явно неправильное, что не могу точно определить:

SELECT e.fname, e.lname, s.fname, s.lname, e.salary
FROM employee e JOIN employee s
ON e.ssn = s.super_ssn
JOIN department d 
ON d.dnumber = e.dno
WHERE d.dname = 'Research'

Это трижды возвращает сотрудника по имени Franklin Wong кто менеджер Но если вы увидите employee.dno, вы увидите, что в отделе Research работают четыре человека, поскольку dno, эквивалентный 5, равен dnumber в таблице отдела.

Что я здесь не так делаю? Пожалуйста и спасибо.

Редактировать 1: Я скорректировал заявление SELECT, и теперь я вижу других сотрудников. Итак, теперь вопрос в том, как мне получить их зарплаты.

Редактировать 2: Ответ от Гордона, но с поправками, чтобы получить имя менеджера вместо super_ssn.


SELECT e.fname, e.lname, s.fname, s.lname, e.salary
FROM employee e JOIN
     employee s
     ON s.ssn = e.super_ssn JOIN
     department d 
     ON e.dno = d.dnumber
WHERE d.dname = 'Research'

1 Ответ

1 голос
/ 13 апреля 2020

Я думаю, что в ваших JOIN условиях таблицы поменялись местами. И вы хотите присоединиться к номеру отдела, а не к SSN:

SELECT e.fname, e.lname, s.super_ssn, e.salary
FROM employee e JOIN
     employee s
     ON s.ssn = e.super_ssn JOIN
     department d 
     ON e.dno = d.dnumber
WHERE d.dname = 'Research'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...