【问题标题】:Get full row with a join based on max value使用基于最大值的连接获取整行
【发布时间】: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 值。

【问题讨论】:

  • 您真的想要来自seasonsMAX(number),还是想要current = 1?您的查询表明 current 是一个布尔值,表示该行是“最新”季节。
  • 这个查询是期望从一个节目返回一行(或者不管它是什么),还是需要涉及由许多不同节目中的每一个分组的最新剧集?这些方法可能会有很大的不同。
  • 最后的查询应该是正确的,除了你不需要 s.number 或 e.number 的 MAX (你的 where 子句负责)。
  • current 是正确的,它是一个布尔值。在最新一季设置为 1,我添加它是为了简化查询,但我想使用 MAX() 函数。我只需要一行,其中应该只包含最新一季的最新一集

标签: mysql subquery max


【解决方案1】:

我认为这会对你有所帮助:

SELECT seasons.*, episodes.* 
FROM episodes
INNER JOIN seasons ON episodes.season_id = seasons.id
ORDER BY seasons.number DESC ,episodes.number DESC 
limit 0,1

【讨论】:

  • 好的,这比我的方法更简单,可能更有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2015-12-23
  • 2021-11-13
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多