在单个查询中获取两个表数据,并且数据应仅包括具有最大排名的那一行

时间:2017-04-07 08:49:24

标签: mysql sql postgresql

我有两个表用户(ID,姓名,电子邮件)和 评论(id,user_id,排名,内容)。在评论表中,我有 user_id 作为用户表的外键。现在我想加入带有评论表的用户表,并希望获得所有用户表数据以及仅具有最高排名的评论数据(id,等级,内容)。我试过mysql MAX函数但是数据返回不正确。有人可以指导我如何实现这一目标。

输入:

  

表1:具有属性ID,名称,电子邮件的用户

     

表2:具有属性id,user_id,rank,content

的注释

输出:用户表数据,评论表旁边排名最高。

  

user_id |名字|电子邮件| comment_id |排名|评论|

1 个答案:

答案 0 :(得分:1)

您可以通过使用连接到排名最高的派生表来执行此操作。

select u.id, u.name, u.email, c.id, c.rank, c.content
from users u
inner join comments c on u.id = c.user_id
inner join 
(select user_id, max(rank) as highest_rank from comments group by user_id) as x
on x.user_id = c.user_id and x.highest_rank = c.rank

这里我使用派生表x来记录每个用户的最高评论排名,然后使用它来限制返回的评论。

这适用于Postgresql