mysql left join 右表存在重复数据,怎么处理?

2016-11-06 11:09:43 +08:00
 shawshi

我有两张表, A 表为文章, B 表为评论表。 我想通过 A 表关联 B 表,并取 B 表最新的评论内容?

我看到网上有说使用 max(id) 然后对 A 表 in ( max(id)),我感觉这样在 A 表内容很多的时候会存在性能问题,不知有没有其他解决方法。

13609 次点击
所在节点    MySQL
26 条回复
des
2016-11-06 14:35:35 +08:00
@shawshi
这样如何
SELECT * FROM users LEFT JOIN (SELECT uid,post,max(time) AS time FROM post GROUP BY uid) USING(uid);
mliilm
2016-11-06 14:41:01 +08:00
需要用 window function ,比如 row number, first value 之类的
msg7086
2016-11-06 15:35:14 +08:00
@des 关于一次搞定还分两次查的问题,建议跑一下看看性能如何,特别是修改数据导致 QueryCache 失效以后的性能。
liujin834
2016-11-06 15:56:45 +08:00
SELECT n.*,(SELECT c.* FROM comment c WHERE n.id=c.id ORDER BY c.id DESC LIMIT 1) FROM news n
reus
2016-11-07 03:59:04 +08:00
这种用窗口函数都是最简单的问题,所以换用 postgresql 吧, mysql 的查询太弱了!
liujin834
2016-11-07 10:22:20 +08:00
@reus 同意, mysql 感觉就像是积木玩具一样。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/318445

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX