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;