使用相同的Table sql更新包含日期的列

时间:2016-07-11 11:36:27

标签: sql postgresql

我有这个表结构

id | value
---|----------
1  |  0.2
2  |  0.3
3  |  0.5
4  |  0.25
5  |  0.37
6  |  0.56
7  |  
8  |  
9  |  

现在我想用元素id = 2到5之间的值来更新最后3个元素的值 我这样做是因为声音非常简单

UPDATE table AS z0
SET value = z1.value
FROM table as z1
WHERE z1.id BETWEEN 2 AND 5
AND z0.id BETWEEn 7 AND 9

但结果是这样的,只是取范围内第一个元素的值(id = 2)

 id | value
    ---|----------
    1  |  0.2
    2  |  0.3
    3  |  0.5
    4  |  0.25
    5  |  0.37
    6  |  0.56
    7  |  0.3
    8  |  0.3
    9  |  0.3

2 个答案:

答案 0 :(得分:2)

这有用吗?

update table 
    set value = (select value
                 from table t2
                 where id between 2 and 5
                 order by random()
                 limit 1
                )
    where value is null;
唉,上面说的不太合适(虽然我认为应该这样)。问题是子查询只执行一次。此版本 工作:

update table t
    set value = (select value
                 from table t2
                 where id between 2 and 5 and t2.id <> t.id
                 order by random()
                 limit 1
                )
    where value is null;

相关子句阻止优化仅运行一次查询。 Here是一个演示逻辑的SQL小提琴。

答案 1 :(得分:1)

您可以使用此

 UPDATE table AS z0
 SET value = z1.value
 FROM table as z1
 WHERE z1.id = (z0.id - 4)
 AND z0.id BETWEEn 7 AND 9