我要把所有的钱都还给你 matches
可用于 rounds
,的 round
有点像一个组织 match
.
我要每个人都回来 rounds
这个 matches
在下一个游戏周中,游戏周是指 match
播放(如1、2、3、4等),并播放到特定日期。
一 match
可以有5个状态,这个告诉我 gameweek
是否播放:
预定
取消
玩
推迟
完成
问题
我有4个 rounds
它们有不同的 matches
,每一个 rounds
是 finished
,因此查询应返回所有 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,我做错了什么?
1条答案
按热度按时间62lalag41#
您应该将您的子查询与主查询相关联,所以不要使用/after
AND m2.round_id IN (52, 53, 54, 55)
你应该有AND m2.round_id = m.round_id
.