假设我有一个名为Messages
的表,其中包含以下字段:
ReplyTo
字段属于int
类型,可以是null
(当邮件不是对其他邮件的回复时)或某些其他邮件MessageID
的值。因此,可以选择将消息设置为对预先存在的消息的回复。
是否可以有一个返回记录列表的查询,从特定消息开始,然后是它回复的记录。反过来,第二条记录后面会有一条消息,它是对......的回复等等。 如果涉及递归,我想有一些。
抱歉我没有使用正确的术语来实现我的目标。我不知道它究竟叫什么,因此我不知道在谷歌要找什么。
答案 0 :(得分: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
在我的示例中,replyto不可为空,因此我将-1定义为root消息。 如果你想要一个特定的消息+他们的孩子,那么你修改第一个SELECT语句。