【问题标题】:Return the last entry of the 2nd table using INNER JOIN使用 INNER JOIN 返回第二个表的最后一个条目
【发布时间】:2013-02-28 15:11:30
【问题描述】:

这是我在这里的第一个问题,所以我会尽量保持简单。

我的“Pendencies System”中有两个表格:

1st - 主要信息(例如 id、发件人、优先级...)
2nd - 第一个表的日志(用户更改的所有内容,例如标题,句号...)

我需要显示与第二张表的最后一个日志链接的每个未决事项,以获取更新信息。

我该怎么做?

提前致谢!

【问题讨论】:

  • 日志表的所有列是什么?什么定义了“最后的日志”?有时间戳列吗?
  • 您需要发布有关您的表结构的更多信息。连接这两个表的键是什么?

标签: mysql group-by sql-order-by inner-join max


【解决方案1】:
SELECT * FROM 
  Main JOIN
  (SELECT * FROM
     Logs where Logs.Id in 
        (SELECT MAX(Id) from Logs GROUP BY Logs.Main_Id)
  ) as newestLogs
  ON newestLogs.Main_Id = Main.Id

这应该可以正常工作

见http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

分析一下如何最快的进行子表查询。

【讨论】:

  • 完美!感谢您的快速回答!
【解决方案2】:

您需要创建一个子查询来从您的日志表中收集 ID 和最大值。像下面这样就足够了。

SELECT m.id, m.sender, m.priority, l2.*
FROM maininfo m
    INNER JOIN (SELECT id, MAX(PrimaryKey) AS Max
                FROM logs
                GROUP BY id) l ON m.id = l.id
    INNER JOIN logs l2 ON m.id = l2.id AND l.Max = l2.PrimaryKey

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 2023-04-11
    • 2012-10-10
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多