2012-06-12 60 views
0

我有以下SQL語句,即使我有300名員工,它也只返回2條記錄。有沒有人看到我可能做錯了什麼?使用LEFT JOIN時沒有收到預期結果?

SELECT  Employees.[Employee ID], 
Employees.Employee, 
Employees.[First Name], 
Employees.[Middle Name], 
Employees.[Last Name], 
Employees.Position, 
[Work].[Work ID] 
FROM Employees LEFT JOIN 
[Work] ON Employees.[Employee ID] = [Work].[Employee ID] 
WHERE [Work].[Work Date] = '06-13-2012' 
+3

那是因爲一個問題... .... ???據推測這是你在哪裏......嘆! –

+0

檢查你的日期。只需從[工作日期] = '06 -13-2012' 的工作中獲得select *的所有記錄,並檢查您從那裏獲取的記錄數。 – DevT

+0

假設它不是'06 -13-2012',[工作日期]包含什麼?另外,我很好奇你的標籤。你有兩個不同的SQL Server,它們擁有相同的數據庫嗎? –

回答

0

您是否在Where子句中檢查了日期?

嘗試轉換爲日期時間或檢查您是否沒有在[工作]。[工作日期]列數據中定義的小時/分鐘/秒。

嘗試刪除連接,看看問題出在哪裏:

SELECT [Work].[Employee ID], [Work].[Work ID] 
FROM [Work] 
WHERE [Work].[Work Date] = '06-13-2012' 

多少條記錄都這樣嗎? 是否所有員工ID都與Employees表中的ID匹配?

如果你需要所有的員工比你應該做一個LEFT OUTER JOIN:

SELECT  Employees.[Employee ID], 
Employees.Employee, 
Employees.[First Name], 
Employees.[Middle Name], 
Employees.[Last Name], 
Employees.Position, 
[Work].[Work ID] 
FROM Employees LEFT OUTER JOIN 
[Work] ON Employees.[Employee ID] = [Work].[Employee ID] 
AND [Work].[Work Date] = '06-13-2012' 

這是你想要的嗎?

+0

它告訴我2條 – RGebara

+0

,那麼你必須在數據庫2次的記錄(如果u運行語句@gjsduarte說 – DevT

+0

我運行SELECT [工作] [工作證] FROM [工作] WHERE [工作] [工作時間] = '06 -13-2012',它給我2條記錄只是對那麼其他員工 – RGebara

3

當使用外連接上外部表濾波器必須在ON子句中應用,否則你有效地得到內部聯接:

SELECT  
    Employees.[Employee ID], 
    Employees.Employee, 
    Employees.[First Name], 
    Employees.[Middle Name], 
    Employees.[Last Name], 
    Employees.Position, 
    [Work].[Work ID] 
FROM Employees 
LEFT JOIN [Work] 
    ON Employees.[Employee ID] = [Work].[Employee ID] 
AND [Work].[Work Date] = '06-13-2012' 
+0

沒錯,這是正確的... –

+0

完美謝謝很多 – RGebara

+0

@ user1450750不客氣:-) –

2

如果你想所有員工,也許你正在尋找的東西,如:

SELECT  Employees.[Employee ID], ... 
FROM Employees LEFT JOIN 
[Work] ON Employees.[Employee ID] = [Work].[Employee ID] 
AND [Work].[Work Date] = '20120613' 

另請注意,您應該使用明確的日期格式,例如YYYYMMDD

+0

它的工作原理謝謝 – RGebara

0

也可嘗試檢查出[工作時間]列 - 如果它也有一部分時間(DateTime數據類型),那麼你應該在考慮:

SELECT  
    Employees.[Employee ID], 
    Employees.Employee, 
    Employees.[First Name], 
    Employees.[Middle Name], 
    Employees.[Last Name], 
    Employees.Position, 
    [Work].[Work ID] 
FROM Employees 
LEFT JOIN [Work] 
    ON Employees.[Employee ID] = [Work].[Employee ID] 
WHERE Convert(Char(10), [Work].[Work Date], 120) = '2012-06-13' -- can find better way