假设我有一个名为 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/