SQL Server:获取多个记录,每个记录包含多个子记录

本文关键字:记录 包含多 Server 获取 SQL | 更新日期: 2023-09-27 18:33:44

>我有 2 个表,第一个包含帖子,第二个包含帖子评论

Posts
-------
[ID] int
{Text] nvarchar(max)
.... (some other columns...)
Comments
--------
[ID] int
[PostID] int
[Comment] Nvarchar(1024)
.... (some other columns)

我想加载每个帖子的前 20 个帖子和前 10 条评论。 问题是当我要在页面上显示帖子时,我需要在帖子后对每个帖子发表评论。

有什么建议吗?

SQL Server:获取多个记录,每个记录包含多个子记录

这将帮助您在 1 次旅行中获得所需的所有数据。您的DataAdapter.Fill命令应如下所示:

SELECT TOP 20 * FROM Posts WHERE ...

然后在同一个命令中,用分号分隔 ; ,有你的第二个 SQL,这将导致在你的DataSet中添加第二个表。

SELECT * 
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER(PARTITION BY PostID ORDER BY ID desc) RowNum 
     FROM 
         Comments 
     WHERE 
         PostID IN (SELECT TOP 20 ID FROM Posts WHERE ...)
    ) tmp 
WHERE 
    RowNum <= 10

此SQL将为您提供上面要求的所有帖子的评论,但每个PostID的最后10个帖子。

请注意,

SELECT TOP 20 ID FROM Posts WHERE ...

应该是第一个 SQL 语句中的确切 SQL,除了单个返回字段是 ID 列。

填写数据集后,请将其保存以供以后使用,以便在记录更改(选择"发布")时,可以获取已在本地供批注的数据

很抱歉这是在 VB 中

Dim DRs as Datarow() = {Your Dataset}.Tables(1).Select("PostID = " & {The current records ID})

希望这有帮助。它应该至少让你指向正确的方向。

使用包含两个与关系连接的数据表的数据集。你可以通过Visual Studio designer来实现这一点。还可以使用较新的实体框架。或者,您可以选择所有帖子,然后在循环浏览帖子时,发出 SQL 语句以从数据库中获取评论(相当慢)。 您也可以一次抓取所有评论,然后在循环浏览帖子时,让嵌套循环过滤掉相应的评论。还可以使用 LINQ 查询按帖子对批注进行分组。这只特别的猫可以有很多种方式剥皮:-)