2014-11-26 2 views
-4

Здравствуйте У меня есть эта схема таблицы:SQL-запрос для базы данных MySQL

EMPLOYEE 
Fname| Minit| Lname| Ssn| Bdate| Address| Sex| Salary| Super_ssn| Dno 

Запрос на имя работника, имя супервизора, и работник заработная плата для каждого сотрудника.

Моя попытка:

$SELECT Fname, Lname, Fname as SFname, Lname as SLname 
FROM EMPLOYEE 
$ 

Это неправильно, но я понятия не имею. Руководитель - сотрудник.

+1

«Это неправильно» <--- какие результаты вы получаете, и какие результаты вы ожидаете? – user2366842

+0

Почему это неправильно? Я не понимаю, в чем проблема. –

+0

проблема заключается в получении имени сотрудника, имени руководителя и заработной платы сотрудника для каждого сотрудника. – kabal

ответ

3

Предполагая, что все сотрудники имеют супервизора

SELECT E1.Fname As "EMP Fname", E1.Lname As "EMP Lname", E2.Fname AS "SUP Fname", E2.Lname As "SUP Lname", E1.salary 
FROM EMPLOYEE E1 
INNER JOIN EMPLOYEE E2 
ON E1.Super_ssn = E2.ssn 

Предполагая, что не все сотрудники имеют супервизора

SELECT E1.Fname As "EMP Fname", E1.Lname As "EMP Lname", E2.Fname AS "SUP Fname", E2.Lname As "SUP Lname", E1.salary 
FROM EMPLOYEE E1 
left join EMPLOYEE E2 
on E1.Super_ssn = E2.ssn 

Второй Виль запрос работы независимо, он просто принимает во внимание работника без руководителя


исправить мою ошибку из комментариев, спасибо за findi нг опечатка

+2

Так оно и должно быть. Рассмотрите возможность предоставления некоторого псевдонима столбца для лучшей читаемости. Кроме того, я думаю, вы хотели сказать 'ON E1.Super_ssn = E2.ssn' – Rahul

+0

Исправлено, спасибо за исправление – Dillon

+0

Я добавил столбцы alliases to hopefulyl сделать вещи чище – Dillon

0

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

SELECT E1.Fname, E1.Lname, E2.Fname as SFname, E2.Lname as SLname, E1.Salary 
FROM EMPLOYEE E1 
LEFT JOIN EMPLOYEE E2 ON E1.Super_ssn = E2.ssn 

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

Я использовал левое соединение включить супервизор на самом верху тоже (как работник не будет иметь никакого super_ssn), если все сотрудники имеют контролер можно опустить LEFT, чтобы сделать его INNER присоединиться.

Если вы хотите, чтобы имя, которое будет строка с начальным тоже можно использовать concat_ws() функцию:

SELECT CONCAT_WS(' ',Fname, Minit, Lname) AS EmpName 

Sample SQL Fiddle

Смежные вопросы