如果右表没有记录,则左连接查询不返回左表记录

时间:2014-12-03 11:40:41

标签: mysql sql

我希望在请求的日期间隔内输出用户及其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 个答案:

答案 0 :(得分: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;
---------^