COALESCE不返回所有结果

时间:2018-07-12 12:44:09

标签: mysql sql

我想返回matches列表中所有可用的roundsround就像一个组织match列表的组。

我想从下一个游戏周的每个roundsmatches返回,一个游戏周就是玩match的时候,例如。 (1、2、3、4等),并播放到特定日期。

match可以有5个状态,可以告诉我gameweek是否播放过:

  1. 预定
  2. 已取消
  3. 推迟
  4. 完成

问题

我有4个rounds,它们有不同的matches,每个roundsfinished,因此查询应返回所有matches的所有{ rounds的{​​{1}}最多,问题是我只有2局,而另外2局却没了。

我的查询是这样:

gameweek

数据示例

competition_seasons(按季节组织比赛)

SELECT m.id, m.round_id, m.datetime,
      CASE m.status
        WHEN 1 THEN 'scheduled'
        WHEN 2 THEN 'postponed'
        WHEN 3 THEN 'canceled'
        WHEN 4 THEN 'playing'
        WHEN 5 THEN 'finished'
      END AS match_status,
      c.name AS competition_name,
      c.id AS competition_id,
      r.name AS round_name
      FROM `match` m
      LEFT JOIN competition_rounds r ON m.round_id = r.id
      LEFT JOIN competition_seasons s ON r.season_id = s.id
      LEFT JOIN competition c ON c.id = s.competition_id
      WHERE 1 AND m.round_id IN (52, 53, 54, 55) AND m.gameweek = 
                  (SELECT COALESCE(MIN(CASE WHEN m2.status < 5 THEN m2.gameweek END), MAX(m2.gameweek))
                  FROM `match` m2 
                  WHERE 1 AND m2.round_id IN (52, 53, 54, 55) )

competition_rounds(包含所有可用的 | id | name | competition_id 1 2018 22

rounds

匹配:

 | id | name | season_id
   52   Foo1     1
   53   Foo2     1
   54   Foo3     1 
   55   Foo4     1

预期输出(id):1、4、5、7、9、10

我的查询仅返回53和54,我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该将子查询与主查询相关联,因此,在AND m2.round_id IN (52, 53, 54, 55)之前/之后,您应该拥有AND m2.round_id = m.round_id