我想返回matches
列表中所有可用的rounds
,round
就像一个组织match
列表的组。
我想从下一个游戏周的每个rounds
到matches
返回,一个游戏周就是玩match
的时候,例如。 (1、2、3、4等),并播放到特定日期。
match
可以有5个状态,可以告诉我gameweek
是否播放过:
问题
我有4个rounds
,它们有不同的matches
,每个rounds
是finished
,因此查询应返回所有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,我做错了什么?
答案 0 :(得分:1)
您应该将子查询与主查询相关联,因此,在AND m2.round_id IN (52, 53, 54, 55)
之前/之后,您应该拥有AND m2.round_id = m.round_id
。