MYSQL Join - 父子表连接,只获取子表的最新记录

Posted

技术标签:

【中文标题】MYSQL Join - 父子表连接,只获取子表的最新记录【英文标题】:MYSQL Join - Parent and Child table join and get only the latest record from the child table 【发布时间】:2011-12-25 18:53:37 【问题描述】:

我有两张表 Posts 和 cmets

发布表

Post_id
Post_content

评论表

comment_id
Comment
post_id
created_date

一个帖子可以有多个 cmets 或零个 cmets

我的要求是使用左外连接获取帖子的最新评论。

我的意思是结果应该是具有以下列的帖子的一条记录。

post_id,post_content ,comment_id,comment 

简而言之,帖子应该与他们的最新评论(如果存在)保持一致。

( 目前系统是先获取帖子,然后再次访问服务器以获取最新的 cmets 以显示,考虑一次性获取它们,因为我们最初只显示一条评论...不知道应该是什么如果想要显示多个评论,最好的方法..?)

谢谢

问候

基兰

【问题讨论】:

【参考方案1】:
SELECT Post.post_id, post_content, comment_id, comment
FROM
    Post LEFT JOIN Comments
        ON Post.post_id = Comments.post_id
        AND created_date = (
            SELECT MAX(created_date)
            FROM Comments
            WHERE Post.post_id = Comments.post_id
        )

顺便说一句,您应该考虑为Comments post_id, created_date 编制索引以获得最佳性能,但如果您使用 InnoDB,请注意非主键索引开销(请参阅this article 中的“集群的缺点”部分)。

【讨论】:

感谢您的回复。我正在考虑类似于 oracle 中的分析功能。但在 mysql 中找不到。 也感谢这篇好文章 :) 我不知道这个。 @Bijji 据我所知,MySQL 中没有像 Oracle 那样的分析功能。欢迎你:) 更改了您的查询位,而不是在 created_date 上,我直接反对 comment_id ... 因为评论 ID max 绝对是该帖子的最新消息。再次感谢

以上是关于MYSQL Join - 父子表连接,只获取子表的最新记录的主要内容,如果未能解决你的问题,请参考以下文章

两个子表的 MySQL JOIN 问题

数据库(比如MYSQL) ,表连结查询与子查询哪个效率高些? 为啥

MySQL JOIN 2 个表并分别获取两个表的总和

如何获取父子表(MS SQL Server/MSAccess)之间的参考信息?

关于mysql中的left join和left outer join的区别

mysql - 如何在 JOIN 查询后在结果表中显示连接表的主键?