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 条评论。 问题是当我要在页面上显示帖子时,我需要在帖子后对每个帖子发表评论。
有什么建议吗?
这将帮助您在 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 查询按帖子对批注进行分组。这只特别的猫可以有很多种方式剥皮:-)