gpt4 book ai didi

postgresql - postgreSQL 中的递归查询?

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

我在这里查看了一些递归查询,但没有发现我的问题。除此之外,我是 postgreSQL 的新手。

我有下表和示例数据:

number  numberto    ab  st  kz  pv
112 200
140 210
200 210
210 220 f2 140 H 2011
220 f2 140 H 2011

查询会稍微复杂一点,但这是我无法解决的部分。 numberto 引用另一个 number 然后可能再次引用。我可以是这个链条持续大约四到五次。

有一天,其他四个列将NOT NULL 并填充字母和/或数字。如果 ab 有内容,那么其他三个也会有内容。如果最后一列已满,numberto 可以进一步引用,但将保持不变,因此它可以停在那里。

我的问题:我需要对一个数字进行递归查询,然后根据需要多次搜索 numberto 直到例如ab 然后被填充并得到它们的输出。

我怎样才能做到这一点?


SELECT version();

PostgreSQL 9.2.6 on x86_64-unknown-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 64-bit

最佳答案

这是一个非常简单的递归查询,当您在递归项中看到非空行时就停止。

给定the following sample table :

WITH RECURSIVE chain AS
(
-- Start with the row with number=140
SELECT number, numberto, ab, st, kz, pv
FROM numbers n
WHERE n.number = 140
UNION ALL
-- and iteratively fetch the 'numberto' id'd row
SELECT n.number, n.numberto, n.ab, n.st, n.kz, n.pv
FROM chain c
INNER JOIN numbers n ON (c.numberto = n.number)
-- unless we've already found a non-null col in our last iteration
WHERE c.ab IS NULL
)
-- Find any non-null result.
SELECT *
FROM chain c
WHERE c.ab IS NOT NULL;

应该可以解决问题,其中 n.number = 140 是您的开始条件。

如果您发现一个非空列,或者如果您有一个 NULL numberto 或不匹配的 numberto(因为内部连接将不添加任何行),迭代将停止。

关于postgresql - postgreSQL 中的递归查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21674589/

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