0

ここでの私の最初の投稿で、助けを期待しています。退職金を支払ったことがない従業員を示すレポートを作成する必要があります。3 つのテーブルから情報を取得する必要があります。特定の控除コード (7001 から 7006) がある場合、従業員は退職金を支払っています。次のテーブルと列があります。

Employee
Employee.empid
Employee.fname
Employee.lname
Employee.jobclass


EarnHistory
EarnHistory.empid
EarnHistory.hoursworked
EarnHistory.checknumber
EarnHistory.checkdate


DeductionHistory
DeductionHistory.empid
DeductionHistory.deductioncode
DeductionHistory.checknumber
DeductionHistory.checkdate

従業員が控除コード 7001 から 7006 に支払ったことがない場合、クエリは empid、fname、lname、hoursworked、deductioncode を取得する必要があります。

NOT EXISTS を使用しようとして失敗しました

4

3 に答える 3

0

このようなものが機能するはずです:

SELECT E.empid, E.fname, E.lname, EH.hoursworked, DH.deductioncode
FROM Employee E
   INNER JOIN EarnHistory EH ON E.empid = EH.empid
   INNER JOIN DeductionHistory DH ON E.empid = DH.empid
   LEFT JOIN DeductionHistory DH2 ON E.empid = DH2.empid 
       AND DH2.deductioncode IN (7001,7002,7003,7004,7005,7006)
WHERE DHD2.empid IS NULL

これは、控除コードのデータ型によって異なります。BETWEEN、<>を使用するか、varcharの場合はアポストロフィを追加できます。

また、使用することができますNOT EXISTS

SELECT E.empid, E.fname, E.lname, EH.hoursworked, DH.deductioncode
FROM Employee E
   INNER JOIN EarnHistory EH ON E.empid = EH.empid
   INNER JOIN DeductionHistory DH ON E.empid = DH.empid
WHERE NOT EXISTS (SELECT * 
                  FROM DeductionHistory 
                  WHERE deductioncode IN (7001,7002,7003,7004,7005,7006)
                     AND E.empid = DeductionHistory.empid)

幸運を。

于 2013-02-02T05:08:43.683 に答える
0
select Employee.empid, Employee.fname , Employee.lname,EarnHistory.hoursworked,           DeductionHistory.deductioncode from Employee 
    join EarnHistory using('empid')  
    join DeductionHistory using('empid')  
    LEFT JOIN DeductionHistory dh ON Empployee.empid = dh.empid 
    AND DH.deductioncode IN (7001,.......,7006)
    WHERE DHD.empid IS NULL
于 2013-02-02T05:15:56.837 に答える
0
SELECT E.empid, E.fname, E.lname, EH.hoursworked, DH.deductioncode
  FROM Employee E, EarnHistory EN, DeductionHistory DH
 WHERE E.empid = EH.empid
   AND E.empid = DH.empid
   AND E.empid <> (SELECT empid
                     FROM DedutionHistory
                    GROUP BY empid 
                   HAVING deductioncode >= 7001
                      AND deductioncode <= 7006)
于 2013-02-02T10:12:22.650 に答える