mysql - 根据其中一个表中特定列中的最大值返回 JOIN 结果

标签 mysql sql join sql-order-by

我有两张 table 。一个名为 movies,另一个名为 movies_downloads。这是表格的示例:

电影:

╔═══╦════════════╗
║   ║ name       ║
╠═══╬════════════╣
║ 1 ║ Movie1     ║
║ 2 ║ Movie2     ║
║ 3 ║ Movie3     ║
╚═══╩════════════╝

movies_downloads:

╔═════════╦════════════╗
║ movieId ║   id (ai)  ║
╠═════════╬════════════╣
║   1     ║     1      ║
║   1     ║     2      ║
║   2     ║     3      ║
║   3     ║     4      ║
╚═════════╩════════════╝

如您所见,它可能是同一部电影的 movies_downloads 中的两行。 (在这种情况下,它是电影 #1)

我想选择从头到尾的所有电影,我想加入下载表,并从中取出最后一行(最大 id)。

在这种情况下,结果将是:

MovieId     Name     movies_downloads.id
   3       Movie3       4      
   2       Movie2       3      
   1       Movie1       2

问题是:它没有给我 id#2(因为他是最后一个),而是给了 id#1。 (这是第一个)

我的代码:

SELECT      `movies`.*, `movies_downloads`.`id`
FROM        `movies`
JOIN        `movies_downloads`
ON          `movies`.`id` =  `movies_downloads`.`movieId` 
GROUP BY    `movies`.`id` 
ORDER BY    `movies_downloads`.`id`
DESC 
LIMIT 10

顺便说一句,如果重要的话,我使用 mysql 引擎。

谢谢!

最佳答案

为了能够显示最近的下载,您需要向 movie_downloads 添加一个可以确定插入顺序的附加列。这通常是自动递增的 Id 列或时间戳列。我假设您要更改模式以添加 movie_downloadsId 列。然后,您可以使用它通过以下查询显示所需的数据

为了返回在特定列中给出最高值的连接行,您将需要使用 this answer 中给出的技术之一来解决同样的问题。这是使用此处显示的第一种技术的演示。

SELECT      m.Id, m.Name, d.Link
FROM        movies as m
JOIN        movies_downloads as d ON m.id = d.movieId 
JOIN   (SELECT MovieId, max(Id) as maxId from movies_downloads GROUP BY MovieId) as d2
            ON d.movieId = d2.movieId AND d.Id = d2.MaxId
ORDER BY    m.id desc
LIMIT 10

此处的第二个连接是关键 - 它位于同一个 movies_downloads 表中,并为该表中的每个 movieId 提供 max(id)。这是连接到 movies_downloads 表的第一个连接,以将从那里包含到选择列表中的行限制为只有一个 - 您想要的行(具有最高的 id值)。

关于mysql - 根据其中一个表中特定列中的最大值返回 JOIN 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689435/

相关文章:

c# - 将过程结果从 Entity Framework 传递到 View

mysql - 连接上的嵌套查询?

sql - 按级别连接不随每行字段的变化而调整

sql - 选择数据库中特定数据类型的所有字段

sql - 如果计数为 0,则不返回 Mysql 结果

mysql - 通过在彼此内嵌套子查询来解决 MySQL 中的 61 个表 JOIN 限制

mysql - 多个用户同时编辑树?

php - SQL NOT IN 运算符无法正常工作

mysql - 设置外键的默认值?

java - 我应该如何在 SQL 表中保存两个大整数数组,以便它们相互关联