数据库的节点(SQLite数据库:递归查询树形结构,列出层级节点)

数据库的节点(SQLite数据库:递归查询树形结构,列出层级节点)

大家好,如果您还对数据库的节点不太了解,没有关系,今天就由本站为大家分享数据库的节点的知识,包括数据库的节点的问题都会给大家分析到,还望可以解决大家的问题,接下来我们就开始吧!



如下图所示的邻接表,表名假设为"表",有三个列:编号、名称、上级编号。通过"上级编号"记录上下级关系。

表示的是下面这样的树形结构:

如果想要以父子关系列出全部结果,通过递归查询实现:

WITH RECURSIVE 递归查询 AS (SELECT *,0 AS 层级 FROM 表 WHERE 上级编号 IS NULLUNION ALLSELECT 表.*, 递归查询.层级 + 1 AS 层级 FROM 表 INNER JOIN 递归查询 ON 表.上级编号 = 递归查询.编号 ORDER BY 层级 DESC)SELECT * FROM 递归查询

上面的SQL递归查询语句,关键部分有两个:

一是在查询过程中新建了临时的"层级"列,用来存储当前行所属的层级,也就是位于树形结构的哪一层(顶层为0,每向下一层就加1)

二是在 UNION ALL 后接的查询中,以临时创建的"层级"字段进行逆向排序(即ORDER BY 层级 DESC这条语句)这个作用是指,以最低层级单位来进行排序,这样才会保证所有最低层级单位正确归属到上级,否则的话,只能查询出全部节点、不能保证节点从属关系。

我发现AI讲递归查询语法,介绍的很清楚。但是,对于具体需求,要么给出的SQL语句有缺陷、要么过于复杂(AI给出的能用的答案是路径拼接方案:在递归中,创建一个路径字段,然后以编号进行拼接,比如 1-2-9 表示 电影->动作电影->冒险片)

如果想快速了解某个知识点,AI是很好的途径,它可以用多种角度、多种语气、多种比喻来让你理解相关的知识(不懂就一直问)。但是一旦深入到具体应用,答案就不一定正确了。

学知识用AI挺好的,入门之后,还是要靠技术文档。

数据库的节点(SQLite数据库:递归查询树形结构,列出层级节点)

关于数据库的节点数据库的节点的介绍到此结束,希望对大家有所帮助。

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读