gpt4 book ai didi

sqlite - 如何反转SQLite CTE的顺序

转载 作者:行者123 更新时间:2023-12-03 17:58:23 26 4
gpt4 key购买 nike

如果执行简单选择,则可以使用ORDER BY对结果进行排序。但是我无法使用WITH RECURSIVE CTE进行此操作,因为我正在使用它来查找从树中的叶子到根的路径,并且CTE创建结果的顺序不是可以获取的顺序通过排序,因此没有ORDER BY我可以反向获取反向顺序。

我的问题是,这从叶到根构造了结果,但是对于查询的后续部分,我需要它从根到叶的顺序相反。但是我无法以这种方式构造查询,因为它最终会沿着树中的所有分支而不是我所需的单个路径出现。因此,我需要以某种方式反转生成的CTE的顺序。我怎样才能做到这一点?

我已经做了一些查找,对于其他(非SQLite)数据库也存在一些类似的问题,这些问题似乎表明CTE表的结果实际上没有任何定义的顺序。我不确定这是否适用于SQLite-我总是看到它以相同的子级将表输出到父顺序,实际上,在其他情况下(例如在创建临时表as in a previous question I asked中),如果表是如果不能保证具有此属性,它将打破唯一可能的解决方案,从而使其无法解决。

最佳答案

documentation说:


递归选择上的ORDER BY子句可用于控制树的搜索是深度优先还是宽度优先。


但是,您要对CTE的最终输出进行排序。
这很容易完成,因为您使用的是普通的SELECT来访问CTE:

WITH RECURSIVE test1(id, parent) AS (
VALUES(3, 2)
UNION ALL
SELECT test.id, test.parent
FROM test JOIN test1 ON test1.parent = test.id)
SELECT *
FROM test1
ORDER BY id -- this sorts normally

关于sqlite - 如何反转SQLite CTE的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256466/

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