Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从同一个sql表更新带有日期的列_Sql_Postgresql - Fatal编程技术网

从同一个sql表更新带有日期的列

从同一个sql表更新带有日期的列,sql,postgresql,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 AN

我有这个桌子结构

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
这行吗

update table 
    set value = (select value
                 from table t2
                 where id between 2 and 5
                 order by random()
                 limit 1
                )
    where value is null;
唉,尽管我认为应该这样做,但上述方法并不奏效。问题是子查询只执行一次。此版本在以下情况下有效:

correlation子句防止优化只运行一次查询。是演示逻辑的SQL提琴。

这行吗

update table 
    set value = (select value
                 from table t2
                 where id between 2 and 5
                 order by random()
                 limit 1
                )
    where value is null;
唉,尽管我认为应该这样做,但上述方法并不奏效。问题是子查询只执行一次。此版本在以下情况下有效:

correlation子句防止优化只运行一次查询。是一个SQL FIDLE,用于演示逻辑。

您可以使用它

 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
你可以用这个

 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

你想要什么结果?你想要什么结果?是什么阻止子查询返回重复的值?@ClodoaldoNeto。限制1.是什么阻止子查询返回重复值?@ClodoaldoNeto。限制是1。