2013-03-30 219 views
1

我有一個設置了以下字段的視點表:MySQL查詢不返回所有結果

paymentID,作業ID,jobnumber可以,jobType,countType,countID,銷售代表,dealershipName,checkTS,paymentAmount,estimatedMailArrival

當checkTS落在某個日期範圍之間時,我需要選擇這些字段。 (checkTS是日期時間字段)。在這些字段之上,我需要從另一個名爲jobtasks的表中選擇兩個時間戳(它們可能存在也可能不存在,所以我將使用左連接)。要做到這一點,我已經建立了下面的查詢:

SELECT 
    s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep,   s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival, 
    jt1.completedTimestamp as Art, 
    jt2.completedTimestamp as List 
FROM salesboard s 
LEFT JOIN jobtasks jt1 ON s.jobID = jt1.jobID 
LEFT JOIN jobtasks jt2 ON s.jobID = jt2.jobID 
WHERE 
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND 
    jt1.taskID = 22 AND 
    jt2.taskID = 23 
ORDER BY s.checkTS DESC; 

查詢不返回任何錯誤,但我發現它不拉的所有記錄(它拉242的182,應該是拉)。我可以手動進入數據庫(mysql)並查看應該被拖動但不是的記錄。一個例子 - 「2013-03-04 10:11:00」的時間戳沒有被拉。

如果我刪除所有的藝術和列表的東西,我得到的結果的正確數量... 242

SELECT 
    s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep, s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival 
FROM salesboard s 
WHERE 
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' 
ORDER BY s.checkTS DESC; 

爲什麼一些記錄不會,如果我使用一個左連接返回?

回答

1

當使用LEFT JOIN時,將這些表中的字段添加到WHERE條件中並不意味着什麼 - 與此時的INNER JOIN相同。

我喜歡動這些類型的WHERE標準爲JOIN本身:

SELECT 
    s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep,   s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival, 
    jt1.completedTimestamp as Art, 
    jt2.completedTimestamp as List 
FROM salesboard s 
LEFT JOIN jobtasks jt1 ON s.jobID = jt1.jobID 
    AND jt1.taskID = 22 
LEFT JOIN jobtasks jt2 ON s.jobID = jt2.jobID 
    AND jt2.taskID = 23 
WHERE 
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND 
ORDER BY s.checkTS DESC; 
0

更改爲:

WHERE 
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND 
    (jt1.taskID = 22 OR jt1.taskID IS NULL) AND 
    (jt2.taskID = 23 OR jt2.tastID IS NULL) 

LEFT JOIN編輯表的任何WHERE條件仍然計數(和這些列的值將是NULL如果表未加入)。

+0

不,它仍然返回182個結果:( – Brds

+0

你能告訴我更新的查詢在你的問題還有,以防萬一? ,你做了'= NULL'而不是'IS NULL'嗎?'IS'是必需的。 – MichaelRushton

+0

我只做了你所做的改變 - 是的,我做了「是」而不是「=」。在編輯中,但sgeddes的回答解決了這個問題。感謝您的輸入......很高興知道仍在計數的表格。 – Brds