【发布时间】:2015-01-18 16:09:20
【问题描述】:
在 mysql 我有这两个表:
**Seasons**
id
number
current
**Episodes**
id
number
season_id
other_info
我想从Episodes 获得一整行,从Seasons 连接的行都基于两个表的最大number 值。
例如,如果我有第 1 季、第 2 季、第 3 季,我想从最近的季中获取最新的剧集。
我从这个查询开始:
SELECT e.id as episode_id, s.id as season_id, MAX(s.number) AS season_number, MAX(e.number) AS episode_number, e.other_info
FROM (episodes AS e)
JOIN seasons AS s ON e.season_id=s.id
WHERE s.current = 1
它有点工作,但它显示错误的other_info 值。我知道这是因为MAX() 对行进行分组,但其他值是随机的,所以我认为它只是从可用的第一行显示other_info。
环顾四周,我发现了这个我认为可行的方法,但它没有:
SELECT e.id as episode_id, s.id as season_id, MAX(s.number) AS season_number, MAX(e.number) AS episode_number, e.other_info
FROM (episodes AS e)
JOIN seasons AS s ON e.season_id=s.id
WHERE s.current = 1 AND
e.number = (select max(sube.number) from episodes sube);
在这种情况下,我只得到所有 NULL 值。
【问题讨论】:
-
您真的想要来自
seasons的MAX(number),还是想要current = 1?您的查询表明current是一个布尔值,表示该行是“最新”季节。 -
这个查询是期望从一个节目返回一行(或者不管它是什么),还是需要涉及由许多不同节目中的每一个分组的最新剧集?这些方法可能会有很大的不同。
-
最后的查询应该是正确的,除了你不需要 s.number 或 e.number 的 MAX (你的 where 子句负责)。
-
current是正确的,它是一个布尔值。在最新一季设置为 1,我添加它是为了简化查询,但我想使用 MAX() 函数。我只需要一行,其中应该只包含最新一季的最新一集