coalesce不返回所有结果

11dmarpk  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(392)

我要把所有的钱都还给你 matches 可用于 rounds ,的 round 有点像一个组织 match .
我要每个人都回来 rounds 这个 matches 在下一个游戏周中,游戏周是指 match 播放(如1、2、3、4等),并播放到特定日期。
match 可以有5个状态,这个告诉我 gameweek 是否播放:
预定
取消

推迟
完成
问题
我有4个 rounds 它们有不同的 matches ,每一个 roundsfinished ,因此查询应返回所有 matches 对于所有的 rounds 最大值 gameweek ,问题是我只有两发子弹,另外两发不见了。
我的问题是:

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) )

数据示例
竞赛季节(按季节组织竞赛)

| 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  | status | round_id | gameweek
     1      5          52       10
     2      5          52       9
     3      5          52       8
     4      5          53       5
     5      5          53       5
     6      5          53       2
     7      5          54       7
     8      5          55       7
     9      5          55       9
     10     5          55       9

预期输出(id):1、4、5、7、9、10
我的查询只返回53和54,我做错了什么?

62lalag4

62lalag41#

您应该将您的子查询与主查询相关联,所以不要使用/after AND m2.round_id IN (52, 53, 54, 55) 你应该有 AND m2.round_id = m.round_id .

相关问题