2016-06-16 5 views
0

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

2 таблицы разделяют общий столбец, который является EmpID.

Мой код возвращает результат только для сотрудников, облагаемых налогом.

Это то, что я пробовал:

select 
    Employee.EmpID, amount as Allw, bSalary 
from 
    Employee 
left join 
    EmployeeAllowance on (Employee.EmpID = EmployeeAllowance.EmpID) 
where 
    taxStatus = 1 
    and Employee.EmpID = 'PC899' 
+0

Возможный дубликат [SQL JOIN и разных типов подключений] (http://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins) –

+2

Это потому, что вы только возвращаете записи 'WHERE taxStatus = 1' –

+0

Запрос выглядит правильно, я задал бы вопрос только ГДЕ. Попробуйте удалить один или оба фильтра. –

ответ

2

Не видя ваши таблицы, я думаю, что проблема с вашим taxStatus = 1 в вашем WHERE заявлении. Это приведет к потере записей, в которых таблица EmployeeAllowance не имеет записи для сотрудника. Вы можете изменить свой запрос только тянуть taxStatus=1 записи из EmployeeAllowance таблицы ПЕРЕД слева присоединиться к нему в:

SELECT Employee.EmpID, 
    amount AS Allw, 
    bSalary 
FROM Employee 
LEFT JOIN EmployeeAllowance ON 
    Employee.EmpID = EmployeeAllowance.EmpID AND 
    employeeAllowance.taxStatus = 1 
WHERE Employee.EmpID = 'PC899' 

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

SELECT Employee.EmpID, 
    amount AS Allw, 
    bSalary 
FROM Employee 
LEFT JOIN (SELECT * FROM EmployeeAllowance WHERE taxStatus = 1) as ea ON 
    Employee.EmpID = ea.EmpID 
WHERE Employee.EmpID = 'PC899' 

Это только первый, немного менее подробный.

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