Mysql 子查询不';t返回预期结果
我正在尝试获取Mysql 子查询不';t返回预期结果,mysql,sql,pdo,Mysql,Sql,Pdo,我正在尝试获取季节.id,其中包含比赛的最长日期。 问题是: SELECT s.id AS season_id, s.name AS season_name, s.competition_id AS competition_id FROM competition_seasons s INNER JOIN competition_rounds r ON r.season_id = s.id INNER JOIN `match` m ON m.round_id = r.id WHERE s.comp
季节.id
,其中包含比赛的最长日期。
问题是:
SELECT s.id AS season_id,
s.name AS season_name,
s.competition_id AS competition_id
FROM competition_seasons s
INNER JOIN competition_rounds r ON r.season_id = s.id
INNER JOIN `match` m ON m.round_id = r.id
WHERE s.competition_id = 89
AND m.datetime = (SELECT MAX(m.datetime) FROM `match` m WHERE m.round_id = r.id)
GROUP BY s.id
正如您所看到的,我有一个名为competition\u seasures
的表,其中包含了一场比赛的所有可用季节,在这个表上我获得了比赛的所有信息,在这种情况下,比赛的id为89
。
后来,我通过表竞赛\u轮
获得了本赛季所有可用的轮
,在轮
上进行比赛
,因此我在比赛
表上使用内部联接
,因为我只需要获得有比赛
的轮
比赛89
有不同的赛季和不同的回合,例如:
- 2017/2018
- 2016/2017
- 2015/2016
查询应返回2017/2018
,因为这是最后一个赛季,该赛季的match
与MAX(m.datetime)
匹配。此字段指示比赛何时进行,在赛季2017/2018
上进行的match
表示日期可以从2017年开始,到2018年结束(在赛季的两年内也是如此)
而查询的结果是2011年,这完全没有意义
我在询问中做错了什么
比赛季
| id | name | competition_id
1 2017/2018 89
2 2016/2017 89
3 2015/2016 89
四轮比赛
| id | name | season_id
1 First 1
2 Second 1
3 First 2
4 Second 2
5 First 3
匹配
预期结果:季节id=1,因为本季节的匹配
字段日期时间
大于前几个季节。尝试以下操作:
SELECT s.id AS season_id,
s.name AS season_name,
s.competition_id AS competition_id
FROM competition_seasons s
INNER JOIN competition_rounds r ON r.season_id = s.id
INNER JOIN `match` m ON m.round_id = r.id
WHERE s.competition_id = 89
AND m.datetime = (SELECT MAX(m1.datetime) FROM `match` m1
INNER JOIN competition_rounds r1
ON m1.round_id = r1.id
INNER JOIN competition_seasons s1
ON r1.season_id = s1.id
AND s1.competition_id = 89)
我认为按
排序和限制
会起作用:
SELECT s.id AS season_id, s.name AS season_name,
s.competition_id AS competition_id
FROM competition_seasons s INNER JOIN
competition_rounds r
ON r.season_id = s.id INNER JOIN
`match` m
ON m.round_id = r.id
WHERE s.competition_id = 89
ORDER BY m.datetime DESC
LIMIT 1;
您能提供一些样本数据和预期结果吗?请提供一些数据和预期结果。另外,“季节”是什么类型的(例如2017/2018)?@D-Shih请检查我的更新,我添加了描述数据类型和情况的样本数据。这返回了与我在问题中所写相同的结果。2011年你能填写2011年四季结果的示例数据吗?
SELECT s.id AS season_id, s.name AS season_name,
s.competition_id AS competition_id
FROM competition_seasons s INNER JOIN
competition_rounds r
ON r.season_id = s.id INNER JOIN
`match` m
ON m.round_id = r.id
WHERE s.competition_id = 89
ORDER BY m.datetime DESC
LIMIT 1;