bar*_*ian 31 sql t-sql sql-server left-join
我正在编写sql查询以获取帖子,并且只对此帖子的最后评论(如果存在).但我找不到一种方法来限制左连接中右列的1行.
以下是此查询的示例.
SELECT post.id, post.title,comment.id,comment.message
from post
left outer join comment
on post.id=comment.post_id
Run Code Online (Sandbox Code Playgroud)
如果帖子有3条评论,我会在这篇文章中获得3行,但我想只有1行和最后一条评论(按日期排序).
有人可以帮我解决这个问题吗?
Qua*_*noi 52
SELECT post.id, post.title, comment.id, comment.message
FROM post
OUTER APPLY
(
SELECT TOP 1 *
FROM comment ?
WHERE c.post_id = post.id
ORDER BY
date DESC
) comment
Run Code Online (Sandbox Code Playgroud)
要么
SELECT *
FROM (
SELECT post.id, post.title, comment.id, comment.message,
ROW_NUMBER() OVER (PARTITION BY post.id ORDER BY comment.date DESC) AS rn
FROM post
LEFT JOIN
comment
ON comment.post_id = post.id
) q
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)
前者对于几个帖子来说效率更高,每个帖子都有很多评论; 后者对于许多帖子来说效率更高,每个帖子的评论很少.
AGo*_*ame 15
子查询:
SELECT p.id, p.title, c.id, c.message
FROM post p
LEFT join comment c
ON c.post_id = p.id AND c.id =
(SELECT MAX(c.id) FROM comment c2 WHERE c2.post_id = p.id)
Run Code Online (Sandbox Code Playgroud)