我的方法:http://sqlfiddle.com/#!15/4f9da/1
我很难解释这个和菜鸟做复杂的查询(只是基础知识),因为它很复杂。
情况:列修订是一组相同的对象,例如:ids1 2 3
是同一个对象,并始终使用id
将最后一个旧对象引用到ground_id
问题:我需要使ord
列为同一组对象创建相同的id。示例:ids 1 2 3
需要将其值设置为1
,因为修订0
是ID 1
。标识4
也是如此,其中必须包含4
和标识5
。
基本上必须是这样的:
答案 0 :(得分:1)
您需要recursive query才能执行此操作。首先,选择ground_id IS NULL
的行,将ord
设置为id
的值。在以下迭代中,您可以根据ground_id
的值添加更多行,将ord
值设置为与其匹配的行的值。然后,您可以将该组行(id, ord)
用作UPDATE
的行源:
WITH RECURSIVE set_ord (id, ord) AS (
SELECT id, id
FROM ground
WHERE ground_id IS NULL
UNION
SELECT g.id, o.ord
FROM ground g
JOIN set_ord o ON o.id = g.ground_id
)
UPDATE ground g
SET ord = s.ord
FROM set_ord s
WHERE g.id = s.id;
(SQLFiddle目前没有响应,所以我不能在那里发布我的代码)