Я использую свое время простоя, чтобы выучить 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'