简体   繁体   中英

left join query does not return left table records if right table does not have records

I want to output users and their total number of wins and losses over requested date interval. When I run the query below within a date range that contains records in results table, everything works fine. However if a user does not have any records in results table for the requested date interval, then no user returned in the request at all. What I want is to return a user record anyway, even if the user does not have any records in results table for the requested date interval.

I believe the GROUP BY makes it behave that way, but I'm not sure how to configure the query to work the way I need it to.

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;

The user is returned, just on a row where the id is NULL . You are grouping by the id in second table.

Instead, group by the first table field:

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;
---------^

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM