gpt4 book ai didi

sql-server - 是否可以通过一次查询获得两组数据

转载 作者:行者123 更新时间:2023-12-04 01:01:01 25 4
gpt4 key购买 nike

我需要从数据库中获取一些项目,每个项目的前三名评论。

现在我有两个存储过程 GetAllItemsGetTopThreeeCommentsByItemId .

在应用程序中,我得到 100 个项目,然后在 foreach 循环中调用 GetTopThreeeCommentsByItemId获得前三名评论的程序。

我知道从性能的角度来看这很糟糕。

是否有一些技术可以通过一个查询来获得它?

我可以用 OUTER APPLY获得最高评论(如果有),但我不知道如何获得三个评论。

Items {ItemId, Title, Description, Price etc.}
Comments {CommentId, ItemId etc.}

我想获取的示例数据
  • 项目_1
    -- 评论_1
    -- 评论_2
    -- 评论_3
  • 项目_2
    -- 评论_4
    -- 评论_5
  • 最佳答案

    如果您使用的是 SQL Server 2005 及更新版本(您在这方面不够具体),则一种方法是使用 CTE(公用表表达式)。

    使用此 CTE,您可以按某些标准对数据进行分区 - 即您的 ItemId - 并让 SQL Server 为每个“分区”从 1 开始为所有行编号,按某些标准排序。

    所以尝试这样的事情:

    ;WITH ItemsAndComments AS
    (
    SELECT
    i.ItemId, i.Title, i.Description, i.Price,
    c.CommentId, c.CommentText,
    ROW_NUMBER() OVER(PARTITION BY i.ItemId ORDER BY c.CommentId) AS 'RowNum'
    FROM
    dbo.Items i
    LEFT OUTER JOIN
    dbo.Comments c ON c.ItemId = i.ItemId
    WHERE
    ......
    )
    SELECT
    ItemId, Title, Description, Price,
    CommentId, CommentText
    FROM
    ItemsAndComments
    WHERE
    RowNum <= 3

    在这里,我为每个“分区”(即每个项目)选择最多三个条目(即评论) - 按 CommentId 排序.

    这是否接近你正在寻找的?

    关于sql-server - 是否可以通过一次查询获得两组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14029999/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com