2014-09-19 63 views
0

所以我得到這個查詢:SQL LEFT JOIN WHERE無法顯示正確的結果

數據結構: 用戶 ID --- inlog ---- ----名字更多的東西

llntoets ID ---代碼---- ---- inlog更多的東西

oefeningen ID --- speler ---狀態---- morestuff

(inlog和speler始終是一個相同的值用戶)

SELECT 
// Some other stuff working 
SUM(o.status) AS oefn 
FROM users AS u 
LEFT JOIN  llntoets AS l 
ON (u.inlog = l.inlog) 
LEFT JOIN  oefeningen AS o 
ON (u.inlog = o.speler) AND o.status = 'afgewerkt' 
WHERE 
code = '$code' 
GROUP BY l.inlog 
ORDER BY klas ASC, klasnr ASC 

一切運行良好,除了1件事情的OEFN變量。它顯示了一個數字,有時它顯示了正確的值,有時它顯示的值比應該高得多。有人告訴我可能是因爲GROUP BY。有人可以幫我嗎?

它應該統計來自表oefeningen的總記錄,其中狀態='afgewerkt',以及speler是來自用戶的內部記錄。謝謝,如果您有其他問題,請嘗試解釋更多。

+3

你可能有1:M的關係,你不期待。在你的選擇中包含l.inlog,按順序排序,然後按語句刪除組。現在找到一個比您預期的SUM高得多的l.inlog值,並查看爲什麼您的選擇中包含這些行。 – Carth 2014-09-19 12:57:00

回答

0

SUM(o.status)在您的查詢中,它不應該計算表oefeningen的總記錄。
該總和是滿足您的條件的所有連接行的值的總和,可以是更高的數字。
還指出,即使您在寫入LEFT JOIN時也應用了篩選器o.status = 'afgewerkt',但您正在執行JOIN查詢。

+0

嘿,試圖改變它,並將SUM編輯到COUNT,並加入它。但是現在我遇到了一個新問題,有時它只計算狀態爲'afgewerkt'的行,有時他會得到所有行。任何想法? – Thempower 2014-09-19 13:35:00