2016-06-16 7 views
0

私は助けが必要です。私は2つのテーブルから従業員の給与と課税可能な手当を得ようとしています。従業員の給与と他の手当を受け取ります。左の結合で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

クエリが正しいように見えますが、私はWHEREだけ質問します。フィルタの1つまたは両方を削除してみてください –

答えて

2

をあなたのテーブルを見ることなく、私の推測では、問題があなたのWHERE声明の中で、あなたのtaxStatus = 1であるということです。 EmployeeAllowanceテーブルに従業員のエントリがないレコードが削除されます。あなたは前にEmployeeAllowanceテーブルからtaxStatus=1レコードを引っ張るだけにクエリを変更することができ、それに参加左:

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' 

最初のものはちょっと冗長ではありません。

関連する問題