gpt4 book ai didi

mysql - COALESCE 不返回所有结果

转载 作者:行者123 更新时间:2023-11-29 07:30:57 24 4
gpt4 key购买 nike

我要返回所有 matches可用于列表 rounds , round有点像一个组织列表的组 match .

我想从每个 rounds 返回matches下一个比赛周,一个比赛周是当一个match播放例如。 (1、2、3、4 等...)并播放到特定日期。

A match可以有 5 个状态,这告诉我如果 gameweek播放与否:

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

问题

我有 4 rounds有不同的 matches , 每个 roundsfinished , 所以查询应该返回所有 matches对于所有 rounds最大 gameweek ,问题是我只有 2 轮,另外 2 轮不见了。

我的查询是这样的:

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_seasons(按季节组织比赛)

 | id | name | competition_id
1 2018 22

competition_rounds(包含所有可用的 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,我做错了什么?

最佳答案

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

关于mysql - COALESCE 不返回所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com