Mysql SQL查询不工作。Count也应该返回零。但即使在外部连接后也不工作

Mysql SQL查询不工作。Count也应该返回零。但即使在外部连接后也不工作,mysql,sql-server,Mysql,Sql Server,我很难找到这个小问题的解决办法。我想要得到球队的数量,同时我也需要零数量。如果我不提及具体的团队,这是可行的。但当查询变得复杂时,无法工作 SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins" FROM checkins RIGHT JOIN teams ON checkins.team_id = teams.id GROUP BY checkins.team_id 当它像这样更改时,无法工作 SELECT t

我很难找到这个小问题的解决办法。我想要得到球队的数量,同时我也需要零数量。如果我不提及具体的团队,这是可行的。但当查询变得复杂时,无法工作

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins"
FROM checkins 
  RIGHT JOIN teams ON checkins.team_id = teams.id
GROUP BY checkins.team_id
当它像这样更改时,无法工作

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins"
FROM checkins 
  RIGHT JOIN teams ON checkins.team_id = teams.id
  WHERE checkins.team_id IN (1,3,2)
GROUP BY checkins.team_id

希望这能如愿

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins"
FROM checkins 
  RIGHT JOIN teams ON checkins.team_id = teams.id
  WHERE checkins.team_id IN ('1','3','2')
GROUP BY checkins.team_id

希望这能如愿

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins"
FROM checkins 
  RIGHT JOIN teams ON checkins.team_id = teams.id
  WHERE checkins.team_id IN ('1','3','2')
GROUP BY checkins.team_id
您可以尝试以下方法:

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins"
FROM checkins 
  RIGHT JOIN teams ON checkins.team_id = teams.id
  WHERE (checkins.team_id IN (1,3,2) OR checkins.team_id IS NULL )
GROUP BY checkins.team_id
您可以尝试以下方法:

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins"
FROM checkins 
  RIGHT JOIN teams ON checkins.team_id = teams.id
  WHERE (checkins.team_id IN (1,3,2) OR checkins.team_id IS NULL )
GROUP BY checkins.team_id

您可以将
WHERE IN…
条件移动到
ON
子句中:

SELECT
    teams.name,
    COUNT(checkins.team_id) AS "count of checkins"
FROM checkins
RIGHT JOIN teams
    ON checkins.team_id = teams.id AND checkins.team_id IN (1,3,2)
GROUP BY checkins.team_id
您最近的更改更改计数的原因是
WHERE
子句在聚合发生之前过滤记录。通过将所有内容移动到
ON
子句中,联接将保留联接右侧进入聚合的所有原始记录

但大多数情况下,我们会使用
左连接而不是右连接来编写此查询:

SELECT
    teams.name,
    COUNT(checkins.team_id) AS "count of checkins"
FROM teams
LEFT JOIN checkins
    ON teams.id = checkins.team_id AND checkins.team_id IN (1,3,2)
GROUP BY checkins.team_id

您可以将
WHERE IN…
条件移动到
ON
子句中:

SELECT
    teams.name,
    COUNT(checkins.team_id) AS "count of checkins"
FROM checkins
RIGHT JOIN teams
    ON checkins.team_id = teams.id AND checkins.team_id IN (1,3,2)
GROUP BY checkins.team_id
您最近的更改更改计数的原因是
WHERE
子句在聚合发生之前过滤记录。通过将所有内容移动到
ON
子句中,联接将保留联接右侧进入聚合的所有原始记录

但大多数情况下,我们会使用
左连接而不是右连接来编写此查询:

SELECT
    teams.name,
    COUNT(checkins.team_id) AS "count of checkins"
FROM teams
LEFT JOIN checkins
    ON teams.id = checkins.team_id AND checkins.team_id IN (1,3,2)
GROUP BY checkins.team_id

使用最右边的表格作为Where条件,因为它位于team_id上,您可以很好地使用:
Where teams.id IN(1,3,2)
。如果希望所有团队都来自
teams
表,则将其切换到
teams LEFT-OUTER-JOIN-checkins
,并在ON子句
中对teams.id=checkins.team_id和checkins.team_id进行限制(1,3,2)
标记冲突,请更正。请使用最右边的表格作为Where条件,因为它位于team_id上,您可以继续:
Where teams.id位于(1,3,2)
。如果希望所有团队都来自
teams
表,则将其切换到
teams LEFT OUTER JOIN checkins
,并在ON子句
ON teams.id=checkins.team_id和checkins.team_id in(1,3,2)
标记冲突,请更正。