我有一个包含树节点信息的表。
element_type_id | root_id | parent_id | number_in_parent
4 1 1 1
4 1 1 2
4 1 1 5
4 2 66 1
4 2 66 2
4 2 66 7
我需要将root_id
2中的所有元素复制到root_1
中。但是,如果element_type_id
和number
匹配,则必须将插入元素重新编号为序列1..99的最小空闲数。
例如:第一个数字为1,2,5。第二个-1,3。结果必须是1,3,4,5,7。
要生成“免费号码”,我可以这样:
SELECT "number" FROM (
SELECT generate_series(1,(
SELECT MAX("number") + 99 as "number"
FROM tree_elements te2
WHERE root_id = 1 AND element_type_id = 4)) AS "number"
EXCEPT SELECT "number"
FROM tree_elements te
WHERE root_id = 1 AND element_type_id = 4
) s
ORDER BY "number" LIMIT 99;
但是我不知道如何在复制查询中使用它(无论它是什么,因为我也不知道)。
我该怎么做?如何使用PostgreSQL解决问题?哪种方式挖? PostgreSQL有类似的功能吗?还是我必须使用循环,内部循环等?