Postgresql pl sql查询递归循环
我只有一张表格“tbl_测试” 下表列出了哪些文件Postgresql pl sql查询递归循环,postgresql,Postgresql,我只有一张表格“tbl_测试” 下表列出了哪些文件 tbl_test table trx_id | proj_num | parent_num| 1 | 14 | 0 | 2 | 14 | 1 | 3 | 14 | 2 | 4 | 14 | 0 | 5 | 14 | 3 | 6 | 15
tbl_test table
trx_id | proj_num | parent_num|
1 | 14 | 0 |
2 | 14 | 1 |
3 | 14 | 2 |
4 | 14 | 0 |
5 | 14 | 3 |
6 | 15 | 0 |
我想要的结果是:获取trx_id值5时
这是一种亲子关系。所以
trx_id -> parent_num
5 -> 3
3 -> 2
2 -> 1
这意味着产值:
3
2
1
获取所有父链
我使用的查询:
SELECT * FROM (
WITH RECURSIVE tree_data(project_num, task_num, parent_task_num) AS(
SELECT project_num, task_num, parent_task_num
FROM tb_task
WHERE project_num = 14 and task_num = 5
UNION ALL
SELECT child.project_num, child.task_num, child.parent_task_num
FROM tree_data parent Join tb_task child
ON parent.task_num = child.task_num AND parent.task_num = child.parent_task_num
)
SELECT project_num, task_num, parent_task_num
FROM tree_data
) AS tree_list ;
有人能帮我吗?没有必要用pl/pgsql来做这件事。您可以直接在SQL中完成。考虑:
WITH RECURSIVE my_tree AS (
SELECT trx_id as id, parent_id as parent, trx_id::text as path, 1 as level
FROM tbl_test
WHERE trx_id = 5 -- start value
UNION ALL
SELECT t.trx_id, t.parent_id, p.path || ',' || t.trx_id::text, p.level + 1
FROM my_tree p
JOIN tbl_text t ON t.trx_id = p.parent
)
select * from my_tree;
如果您使用的是PostgresSQL,请尝试使用:
看看递归CTE(
带有递归查询)。检查了,但令人困惑…Mysql不支持,所以最好试试这个,@face.peck这被标记为postgresql。您从何处获取mysql?此查询将继续运行。不停止并抛出输出是否可能存在分层循环?如果您想查看它返回的内容,请添加到my_树中的第二个选择中,其中级别<5
,并且它将只返回前4个迭代。在这种情况下,这对调试非常有用。此外,请注意,如果您需要循环(即,这是一个图形而不是一个树),您必须做一些额外的事情来过滤它们,
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
), top_regions AS (
SELECT region
FROM regional_sales
WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
product,
SUM(quantity) AS product_units,
SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;