在PostgreSQL中向数组插入值
我试图将值插入整数数组,用作显示特定节点的所有祖先的路径 这些值(在PostgreSQL中向数组插入值,sql,arrays,postgresql,common-table-expression,recursive-query,Sql,Arrays,Postgresql,Common Table Expression,Recursive Query,我试图将值插入整数数组,用作显示特定节点的所有祖先的路径 这些值(parent\u link integer)来自ID为且parent\u link的表。我尝试遍历树状结构,将所有父链接组合到一个路径中,插入到属于该特定ID的整数数组中。我尝试对数据库中的每个记录执行此操作。到目前为止,我已经: INSERT INTO master_ifis_network (path) SELECT t2.parent_link FROM master_ifis_network as t2 WHERE t2.
parent\u link integer
)来自ID为且parent\u link
的表。我尝试遍历树状结构,将所有父链接
组合到一个路径中,插入到属于该特定ID的整数数组中。我尝试对数据库中的每个记录执行此操作。到目前为止,我已经:
INSERT INTO master_ifis_network (path)
SELECT t2.parent_link
FROM master_ifis_network as t2
WHERE t2.parent_link = (SELECT t1.parent_link
FROM master_ifis_network as t1)
AND t2.link_id = (parent_link)
我收到一个错误,说明我无法在需要整数[]
的位置插入整数。
我也尝试过这个方法,它输出一个父节点列表:
SELECT parentX.parent_link FROM [table name] as nodeX, [table name] as parentx
WHERE nodeX.left BETWEEN parentX.left AND parentX.right)
AND nodeX.link_id = [some id]
ORDER BY parentX.left DESC
有什么提示或想法吗?以下是我的结论:
UPDATE master_ifis_network SET path = array(SELECT parentX.parent_link
FROM master_ifis_network AS parentX
WHERE (nodeX.left BETWEEN parentX.left AND parentX.right) AND nodeX.link_id = [some id]
ORDER BY parentX.left DESC)
WHERE link_id = [same id];"
使用递归CTE,即:和递归
您需要的是更新
,而不是插入
:
WITH RECURSIVE cte AS (
SELECT link_id, ARRAY[parent_link] AS path, 1 AS level
FROM master_ifis_network
UNION ALL
SELECT c.link_id, m.parent_link || c.path, c.level + 1
FROM cte c
JOIN master_ifis_network m ON m.link_id = c.path[1]
)
UPDATE master_ifis_network m
SET path = sub.path
FROM (
SELECT DISTINCT ON (link_id) *
FROM cte
ORDER BY link_id, level DESC
) sub
WHERE m.link_id = sub.link_id;
有关答案:
这里还有很多其他人。用上面的关键字搜索。我不知道SQL Server希望如何在字段中插入“integer[]”值。我错过什么了吗?我想输入所有数据的列是一个整数[]您使用的是什么数据库引擎?确切的错误消息和主ifis_网络
模式是什么?像这样的问题需要一个表定义(在psql
中使用\d tbl
)和Postgres的确切版本。感谢您的反馈。