gpt4 book ai didi

sql - 如何在sql中对链表进行排序?

转载 作者:行者123 更新时间:2023-12-02 05:21:38 25 4
gpt4 key购买 nike

我已经实现了一个链表作为自引用数据库表:

CREATE TABLE LinkedList(
Id bigint NOT NULL,
ParentId bigint NULL,
SomeData nvarchar(50) NOT NULL)

其中 Id 是主键,ParentId 是列表中前一个节点的 Id。第一个节点的 ParentId = NULL。

我现在想要从表中进行 SELECT,按照行应出现的顺序对行进行排序,作为列表上的节点。

例如:如果表包含行

Id      ParentId  SomeData
24971 NULL 0
38324 24971 1
60088 60089 3
60089 38324 2
61039 61497 5
61497 60088 4
109397 109831 7
109831 61039 6

然后使用标准对其进行排序,结果应该是:

Id      ParentId  SomeData
24971 NULL 0
38324 24971 1
60089 38324 2
60088 60089 3
61497 60088 4
61039 61497 5
109831 61039 6
109397 109831 7

您应该使用SomeData列作为控件,所以请不要在ORDER by SomeData中作弊:-)

最佳答案

我找到了 SQLServer 的解决方案,但看起来比 Quassnoi 的解决方案大而且不那么优雅

WITH SortedList (Id, ParentId, SomeData, Level)
AS
(
SELECT Id, ParentId, SomeData, 0 as Level
FROM LinkedList
WHERE ParentId IS NULL
UNION ALL
SELECT ll.Id, ll.ParentId, ll.SomeData, Level+1 as Level
FROM LinkedList ll
INNER JOIN SortedList as s
ON ll.ParentId = s.Id
)

SELECT Id, ParentId, SomeData
FROM SortedList
ORDER BY Level

关于sql - 如何在sql中对链表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/515749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com