我正在写sql查询来获取帖子和这个帖子的最后一条评论(如果存在的话)。但是我找不到一种方法来限制左连接中右列只有1行。
以下是此查询的示例。
SELECT post.id, post.title,comment.id,comment.message
from post
left outer join comment
on post.id=comment.post_id
如果帖子有3个评论,我得到3行与此职位,但我只想与最后一个评论(按日期排序)1行。
有人能帮我查询一下吗?
我正在写sql查询来获取帖子和这个帖子的最后一条评论(如果存在的话)。但是我找不到一种方法来限制左连接中右列只有1行。
以下是此查询的示例。
SELECT post.id, post.title,comment.id,comment.message
from post
left outer join comment
on post.id=comment.post_id
如果帖子有3个评论,我得到3行与此职位,但我只想与最后一个评论(按日期排序)1行。
有人能帮我查询一下吗?
6条答案
按热度按时间t9eec4r01#
或
前者对于每个帖子中有许多评论的帖子更有效;后者对于许多每个帖子几乎没有评论的帖子来说效率更高。
9rnv2umw2#
子查询:
yh2wf1be3#
您可能希望联接到返回帖子最后一条评论的子查询。例如:
8yoxcaq74#
有几个选择...
一种方法是在以下对象上执行JOIN:
(note我假设comment.id是一个身份字段)
vfh0ocws5#
什么版本的SQL Server?如果你有Row_Number()函数,你可以根据“first”对你来说意味着什么来对你的评论进行排序,然后添加一个“where RN=1”子句。我的脑海中没有一个方便的例子或正确的语法,但确实有大量的查询可以做到这一点。其他帖子都有1,000种你可以做到这一点的方法。
我会说侧写它,看看哪一个最适合你。
voj3qocg6#
您没有说出日期字段的具体名称,所以我用
[DateCreated]
填充,这与上面的AgoodDisplayName的帖子基本相同,但使用日期字段而不是依赖ID列排序。