我有一个 skowflake 数据库,其中包含下表,其中包含列
PARENT_ID
、ITEM_ID
、ORDER
。该表反映了文件系统的内容,其中项目是文件或文件夹,PARENT_ID
是每个项目的父项目。 order
是每个项目在其父项中的位置。例如,此树显示了项目之间的层次结构,之后的表显示了关系:
我的目标是基于深度优先搜索以特定顺序检索项目 id。它的意思是这样的桌子:
Snowflake不支持命令
SEARCH DEPTH FIRST BY ID SET DFS
。我认为它可以利用信息级别、位置、父位置,但到目前为止我还没有找到解决方案。
否则,我还尝试过做其他事情:通过 API,我设法获得了项目的最终排序,因此我有以下信息:item_id、排序的数组。我不知道如何在检索最终表的查询中传递此信息。
我不确定这里的性能,但您可以在递归 CTE 中构建每个项目的路径(基于深度和顺序),然后在该路径上排序将为您提供深度优先搜索。
with cte as (
select parent_id, item, 0 as depth, [depth||','||ord] arr
from mytable x
where parent_id is null
union all
select x.parent_id, x.item, c.depth+1, array_append(c.arr, c.depth+1||','||x.ord)
from cte c
join mytable x
on c.item = x.parent_id
)
select item
from cte
order by arr