gpt4 book ai didi

sql - 从子树(PostgreSQL ltree)查询中选择根节点,返回几个后代

转载 作者:行者123 更新时间:2023-11-29 12:22:37 25 4
gpt4 key购买 nike

是否有一种简单的方法可以从返回(可能)同一子树的几个后代节点的查询中选择子树(PostgreSQL ltree)的根节点?我已经实现了一个相当冗长的算法来完成任务(约 40 行,缩进和格式化),但如果我可以利用 ltree 数据实际上是树并且具有易于访问的根节点这一事实,那就太棒了。需要注意的是,单个查询可能会返回多个不同的子树根,因此我不能仅仅对数据进行排序并获取最靠前的结果。

2012 年 6 月 7 日:我已将查询更新到我的最新版本,这将时间复杂度减半。它使用自反连接(如果你愿意的话)从子树中删除所有在子树中有祖先的节点。

基本上,我的算法的工作原理如下:

WITH roots AS
(
/* Place any query here, which returns a field "ancestry" of type ltree */
)
SELECT roots.*
FROM roots
WHERE NOT EXISTS
(
SELECT 1
FROM roots AS ancestors
WHERE ancestors.ancestry @> roots.ancestry
AND ancestors.id <> roots.id
);

(有关详细信息,请参阅我的要点,此处:https://gist.github.com/1507368)

最佳答案

你不能只使用 subpath() 函数吗?

SELECT
SUBPATH(ancestry, 0, 1)
FROM
some_table;

关于sql - 从子树(PostgreSQL ltree)查询中选择根节点,返回几个后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580003/

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