2014-12-03 82 views
0

我希望在請求的日期間隔內輸出用戶及其總數winslosses。當我在包含results表中的記錄的日期範圍內運行下面的查詢時,一切正常。但是,如果用戶在results表中沒有關於請求的日期間隔的任何記錄,則根本沒有用戶返回請求。我想要的是返回用戶記錄,即使用戶在results表中沒有任何要求的日期間隔記錄。如果權限表沒有記錄,則左連接查詢不會返回左表記錄

我相信GROUP BY使它的行爲,但我不知道如何配置查詢以我需要的方式工作。

SELECT 
    users.name, 
    users.division, 
    SUM(results.wins) as wins, 
    SUM(results.losses) as losses 
FROM users LEFT JOIN results ON users.user_id = results.user_id 
    AND results.date BETWEEN {$startDate} AND {$endDate} 
WHERE users.user_id = {$user_id} GROUP BY results.user_id; 
+1

你嘗試用'users.user_id'分組,因爲這應該是等價的? – Nanne 2014-12-03 11:44:09

回答

1

用戶返回,就在一行中,其ID爲NULL。你在第二個表中由id分組。

相反,第一表字段組:

SELECT u.name, u.division, 
     SUM(r.wins) as wins, SUM(r.losses) as losses 
FROM users u LEFT JOIN 
    results r 
    ON u.user_id = r.user_id AND r.date BETWEEN {$startDate} AND {$endDate} 
WHERE u.user_id = {$user_id} 
GROUP BY u.user_id; 
---------^ 
+0

謝謝,這工作。簡單的解決方案,但我無法弄清楚。 – qwaz 2014-12-03 11:49:47

+0

@dmit。 。 。這是一個非常微妙的問題。如果在使用外連接時遇到問題,首先要考慮的是您是否使用具有「NULL」值的列。 – 2014-12-03 12:36:09

相關問題