【问题标题】:Limit number of records in outer join based on left-hand table根据左表限制外连接中的记录数
【发布时间】:2011-01-12 05:30:49
【问题描述】:

我有两个表要外连接在一起:“发布”左外连接和“评论”。

帖子和评论之间存在一对多的关系。

我希望能够为每个帖子提取第一个(例如 10 条)帖子记录和所有相关评论(如果有)。

我通常这样做的方式是使用公用表表达式并使用 ROW_NUMBER() OVER。但是,ROW_NUMBER() 计算每一行,在这种情况下这不起作用,因为我只想计算 Post 记录。

我正在查看 ROW_NUMBER() OVER (PARTITION),但它没有按我的预期工作。

所以如果想要前 5 个帖子,我会得到类似的内容:

PostNumber     PostId     CommentId
1              1          1
1              1          2
2              2          -
3              8          3
3              8          4
4              9          5
5              15         -

【问题讨论】:

  • 您想要十个 POSTS 记录,其中 COMMENTS 可能有 1+?因此,如果 POSTS 记录 #1 有 100 多个 cmets...

标签: sql-server join


【解决方案1】:

看看使用DENSE_RANK函数

返回行的排名 结果集的分区,没有任何 排名的差距。一行的排名 是一加不同的数量 排在行前的排名 问题。

类似

;WITH Vals AS (
        SELECT  p.*,
                DENSE_RANK() OVER(ORDER BY p.PostID) DenseRankID
        FROM    Post p LEFT JOIN
                Comments c ON p.PostID = c.PostID
)
SELECT  *
FROM    Vals 
WHERE   DenseRankID <= 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2021-10-15
    • 2011-07-11
    • 2015-11-01
    相关资源
    最近更新 更多