如何更新一组行

时间:2016-01-22 21:05:25

标签: sql postgresql

我的方法:http://sqlfiddle.com/#!15/4f9da/1

我很难解释这个和菜鸟做复杂的查询(只是基础知识),因为它很复杂。

情况:列修订是一组相同的对象,例如:ids 1 2 3是同一个对象,并始终使用id将最后一个旧对象引用到ground_id

问题:我需要使ord列为同一组对象创建相同的id。示例:ids 1 2 3需要将其值设置为1,因为修订0是ID 1。标识4也是如此,其中必须包含4和标识5

基本上必须是这样的:

enter image description here

1 个答案:

答案 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目前没有响应,所以我不能在那里发布我的代码)