gpt4 book ai didi

sql - SQL 中的层次结构搜索

转载 作者:行者123 更新时间:2023-12-04 18:28:59 24 4
gpt4 key购买 nike

我有下表

ID   CATALOGUE  SWID   PARENTSWID   LEVEL
1 1 1 1 0
2 1 2 1 1
3 1 3 1 1
4 1 4 2 2
5 1 5 4 3
6 1 6 5 4
7 2 2 2 0
8 2 3 2 1

所以我想要所有具有 PARENTSWID= "1" 的元素 (SWID)

根级别始终为“0”,并且根元素具有相同的SWIDPARENTSWID

树的深度没有边界。稍后我将不得不使用 CATALOGUE 属性限制搜索,但现在我需要知道如何设置它。

那么,有人做过这样的事吗? :)

亲切的问候森马


WITH cte as
(
SELECT ID, CATALOGUE, SWID, PARENTSWID, LEVEL
FROM table
WHERE PARENTSWID = 1
AND LEVEL = 0
UNION ALL
SELECT t.ID, t.CATALOGUE, t.SWID, t.PARENTSWID, t.LEVEL
FROM table t
JOIN CTE ON cte.ID = t.PARENTSWID
AND t.LEVEL= cte.LEVEL+1
)
SELECT ID, CATALOGUE, SWID, PARENTSWID, LEVEL FROM cte;

尝试此操作时,我收到错误“未知 ISC 错误 336397226”。
我查了这个错误,它的意思是:336397226 dsql_cte_cycle CTE '@1' has cyclic dependencies

我的 table 上的东西和这里的一样

(我已经在 IBWSQL 上试过并选择了我的数据库)

最佳答案

这适用于 sqlserver 2005+

DECLARE @PARENTSWID int = 1
;WITH cte as
(
SELECT ID, CATALOGUE, SWID, PARENTSWID, LEVEL
FROM table
WHERE PARENTSWID = @PARENTSWID
AND LEVEL = 0
UNION ALL
SELECT t.ID, t.CATALOGUE, t.SWID, t.PARENTSWID, t.LEVEL
FROM table t
JOIN CTE ON cte.ID = t.PARENTSWID
AND t.LEVEL = cte.LEVEL +1
)
SELECT ID, CATALOGUE, SWID, PARENTSWID, LEVEL FROM cte
OPTION (MAXRECURSION 0)

参见 this fiddle .

关于sql - SQL 中的层次结构搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988950/

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