sql-server - 菊花链 SQL 记录

标签 sql-server

假设我有一个名为 Messages 的表,其中包含以下字段:

  • 消息ID,
  • 消息标题,
  • 消息正文,
  • 消息日期,
  • 回复

ReplyTo 字段为 int 类型,可以为 null(当消息不是对另一消息的回复时)或值其他消息的 MessageID。因此,可以选择将消息设置为对预先存在的消息的回复。

是否可以有一个返回记录列表的查询,从特定消息开始,然后是它正在回复的记录。反过来,第二条记录后面会跟着它所回复的消息……等等。 我想如果涉及到某种递归。

很抱歉没有使用正确的术语来实现我想要实现的目标。我不知道它的真正名称是什么,因此我不知道要在 Google 中查找什么内容。

最佳答案

希望这有助于作为方法:

CREATE TABLE [dbo].[messages](
    [id] [int] NOT NULL,
    [replyto] [int] NOT NULL,
    [title] [nvarchar](max) NULL,
    [body] [nvarchar](max) NULL,
    [created_at] [datetime] NULL
) ON [PRIMARY]

然后选择这样的数据:

WITH Children (id, replyto, title, body, created_at) AS (
  SELECT id, replyto, title, body, created_at
  FROM [messages]
  WHERE replyto = -1 -- all msg from root
  UNION ALL
  SELECT b.id, b.replyto, b.title, b.body, b.created_at 
  FROM Children a, [messages] b
  WHERE a.id = b.replyto
)
SELECT id, replyto, title, body, created_at FROM Children

在我的示例中,replyto 不可为空,因此我将 -1 定义为根消息。 如果您想要特定消息 + 他们的子消息,那么您可以修改第一个 SELECT 语句。

关于sql-server - 菊花链 SQL 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16313617/

相关文章:

c# - 如何使用 Angular 和 ASP.Net Core 转换字节数组 [] 中的文件并存储在数据库中?

c# - Entity Framework 包括性能

SQL Server "two way"2 列的唯一/主键

sql-server - 如何使用 SQL Server 存储过程(计划每周运行)的结果来分析一段时间内的数据趋势?

对具有 from 至 条目的表进行 SQL 联接

asp.net - 如何查看 mdf 文件中的数据

mysql - SQL Server 2008 排序规则

SQL 是否可以在 UDF 中使用 IF 语句,您是如何做到的?

c# - 如何在负载平衡的 Azure 虚拟机上使用 SessionState

sql-server - 在不同的数据库上下文下执行存储过程?