![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hello, I'm trying to link two tables... one for Employees and the other for Timecards I need to get a list of employees that do not have timecards on an SPECIFIC DATE I tried the follonwing SELECT Employess.EmployeeID FROM Employees LEFT OUTER JOIN Timecards on Employees.EmployeeID = Timecards.lmpEmployeeID WHERE lmpEmployeeID is NULL and lmpTimecardDate = '10/24/2007' But it doesn't work. However, when I comment the date condition out (lmpTimecardDate = '10/24/2007') it works all right but It's not what I need Another interesting point... if I use the following query... it works all right SELECT Employess.EmployeeID FROM Employees WHERE Employees.EmployeeID not in (select Timecards.EmployeeID from Timecards where TimecardDate = '10/24/2007') I'd like to be able to use the Left Outer Join option.... Am I doing something wrong?... or is it that if It doesn't like the condition I'm usgin in the WHERE clause (TimecardDate = '10/24/2007') Thanks for your help Pablo |
#3
| |||
| |||
|
|
SELECT Employess.EmployeeID FROM Employees LEFT OUTER JOIN Timecards on Employees.EmployeeID = Timecards.lmpEmployeeID WHERE lmpEmployeeID is NULL and lmpTimecardDate = '10/24/2007' But it doesn't work. However, when I comment the date condition out (lmpTimecardDate = '10/24/2007') it works all right but It's not what |
#4
| |||
| |||
|
|
(pbassu... (AT) hotmail (DOT) com) writes: SELECT Employess.EmployeeID FROM Employees LEFT OUTER JOIN Timecards on Employees.EmployeeID = Timecards.lmpEmployeeID WHERE lmpEmployeeID is NULL and lmpTimecardDate = '10/24/2007' But it doesn't work. However, when I comment the date condition out (lmpTimecardDate = '10/24/2007') it works all right but It's not what In addition to David's post, here is what is happening: The FROM ... LEFT JOIN operators define a table that includes all rows in the outer table, Employees in this case. This table includes the columns from the Timecards table, but for the employees there there is no timecard, all columns have NULL. Which you apparently have understood, since you the condition "lmpEmployeeID IS NULL". But then there is a lapse, and you filter lmpTimecardDate despite it is not likely that there is a row in Timecards where the date is non-NULL and the employee ID is NULL. (At least one would hope so!) Moving the date condition to the ON clause addresses the issue, as it now will be part of the condition that builds the table that is then filtered by WHERE. Personally, I would prefer to write this query with NOT EXISTS: SELECT E.Employee FROM Employees E WHERE NOT EXISTS (SELECT * FROM Timecards T WHERE E.EmployeeID = T.lmpEmployeeID AND T.lmpTimecardDate = '20071014') Simply because this clearly express what this is all about. And I would also use a date format that is safe from misinterpretations. -- Erland Sommarskog, SQL Server MVP, esq... (AT) sommarskog (DOT) se Books Online for SQL Server 2005 athttp://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books... Books Online for SQL Server 2000 athttp://www.microsoft.com/sql/prodinfo/previousversions/books.mspx |
![]() |
| Thread Tools | |
| Display Modes | |
| |