我试图在PostgreSQL中实现简单的递归函数,但我无法完成它...

我有表MyTable,其中包括列Col1和Col2。 里面的数据是这样的:

Col1 | Col2

1 | 2  
2 | 5 
2 | 6
3 | 7
4 | 5
4 | 2
5 | 3

我想写一个函数,它作为Col1 fe(1,2)的参数数组,并给我回Col2这样的值:

1 | 2
2 | 5
2 | 6

然后再次结果:(2,5,6)所以:

1 | 2
2 | 5
2 | 6
5 | 3

(2已经存在,密钥'6'不存在)并且再次(3):

1 | 2
2 | 5
2 | 6
5 | 3
3 | 7

并且(7)没有,因为Col1中不存在值'7'。

这是一个简单的递归,但我不知道如何实现它。 到目前为止,我有这样的事情:

with recursive aaa(params) as (
    select Col1, Col2
    from MyTable
    where Col1 = params -- I need an array here
    union all
    select Col1, Col2
    from aaa
)
select * from aaa;

但它当然不起作用

提前致谢

#1楼 票数:7 已采纳

递归的基本模式是将基本情况作为联合的第一部分,在第二部分中将递归结果连接到产生下一级结果所需的结果。 在你的情况下,它看起来像这样:

WITH RECURSIVE aaa(col1, col2) AS (
        SELECT col1, col2 FROM mytable
            WHERE col1 = ANY (ARRAY[1,2]) -- initial case based on an array
    UNION -- regular union because we only want new values
        SELECT child.col1, child.col2
            FROM aaa, mytable AS child -- join the source table to the result
            WHERE aaa.col2 = child.col1 -- the recursion condition
) 
SELECT * FROM aaa;

  ask by javaGirl translate from so

未解决问题?本站智能推荐:

1回复

PostgreSQL从结果中选择for循环

我的英语不是最好的,但我会尽力的。 我有带有评论和回复的表格,我想从评论中选择父级LIMIT 10,然后选择与这些评论相关的回复。 我想要的是: 当我得到父母身份时,我会得到这个 但我无法通过此返回执行forloop。
1回复

postgresql:选择数组

我的桌子看起来像: 我在寻找一个SELECT查询将返回我的阵列t像{{1,2}, {5,2}, ... {1,9}} 已经t没有一个数组数据类型,它本来是很容易这样的: 如果数据类型是int[]可以这样做吗?
1回复

PostgreSQL根据数组值的组合选择行

我想从数据库中选择所有行,其中一行包含一组单词/数组中至少两个词。 例如:我有以下数组: 然后我将推文数据集存储在数据库中。 所以我想知道哪些推文(列名: tweet.content)包含 至少两个词。 我当前的代码看起来像这样(但当然它只会选择一个单词...): 所以最后一行
2回复

在数组中查找值(Postgresql)

以下命令返回“ {3130,3135,2179,3186} ”,键入“ INTEGER [] ”: 如果我试图通过直接将文本转换为整数数组来找到数字“3186”,它可以正常工作: 但是如果我尝试对第一个查询的结果做同样的操作,我得到一个“ 运算符不存在:integer = integer
3回复

如何从postgresql中的数组中计算特定值

我有一个名为“用户”的表,其中包含详细信息或 user_id 和 product_item_code。 前任: 我要数这些product_item_code 556, 990, 623。重复了多少次。 我正在寻找一个查询来给我一个像下面这样的输出 我已经尝试了下面的代码,但无法获得预期的输出。 请让
2回复

无法从第二列PostgreSQL中的数组获取元素

我制作了二维数组作为时间戳类型。 然后我添加了这样的插入 我如何只获得第二个元素? 创建表: 然后,我在下面做了一些插入: 例如,当我选择某物时 其显示如下:2017-03-01T14:00:00,2017-06-01T21:00:00我试图选择card_period [0
2回复

选择数组中的最后一个公共元素

我有一个像这样的提交表 给定两个提交 ID,我试图找到最新的(距离数组末尾最远的)公共 parent_commit_id。
1回复

PostgreSQL整数数组值使用desc字符串连接到其他表中的整数

我有一个带有int数组的表test列,其值为{1000,4000,6000}或{1000}或{1000,4000}称为ekw 。 这些值与另一个表中的描述字符串匹配 是否可以选择这些列并打印字符串? 就像是: 我想看到这个结果: 我试过IN和ANY但是无法让它工作。