2

假设我有Messages使用以下字段调用的表:

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

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

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

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

4

1 回答 1

2

希望这有助于作为方法:

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

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

于 2013-05-01T06:56:38.187 回答