使用LEFT OUTER JOIN返回计数,即使是0。

问题描述 投票:0回答:1

我试图返回所有指定的事件_abr,即使计数为0。

这是我的SQL查询。

SELECT
    basketball_event_types.event_abr,
    count(*) value
FROM
    basketball_event_types
    LEFT OUTER JOIN basketball_game_events on basketball_event_types.id = basketball_game_events.event_type_id
    LEFT JOIN users on basketball_game_events.player_id = users.id
WHERE
    users.id = 198
AND
    basketball_game_events.game_id = 213
AND
    (basketball_event_types.event_abr = "TO" OR basketball_event_types.event_abr = "AST")
GROUP BY basketball_event_types.event_abr

然而,当我运行这个时,指定的用户(198)对指定的游戏(213)有0个AST。我希望AST ->0能弹出,但就是没有。我试过的两件大事是在LEFT JOIN中加入OUTER,我还试过使用ifnull(count(*), 0)。两种方法都没有得到我想要的结果。

mysql sql
1个回答
2
投票

筛选需要在 on 子句。 而你需要修正 count():

SELECT bet.event_abr, COUNT(u.id) as value
FROM basketball_event_types bet LEFT JOIN
     basketball_game_events bge
     ON bet.id = bge.event_type_id AND bge.game_id = 213 LEFT JOIN
     users u 
     ON bge.player_id = u.id AND u.id = 198
WHERE bet.event_abr IN ('TO', 'AST')
GROUP BY bet.event_abr;

注意这些变化。

  • 滤波被移到 ON 子句 -- 两者都过滤到适当的子句。
  • COUNT() 计入最后一个 LEFT JOIN表的别名使查询更容易编写和阅读。
  • 表的别名使查询更容易写和读。
  • IN 表的别名比一连串的 OR 条件:
© www.soinside.com 2019 - 2024. All rights reserved.