![](/img/trans.png)
[英]Oracle SQL: Update a table with data from another columns of the same table
[英]Update columns with date from the same Table sql
我有这个表结构
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;
las,上面的方法行不通(尽管我认为应该如此)。 问题在于子查询仅被执行一次。 此版本可以正常工作:
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;
相关子句阻止只运行一次查询的优化。 这是一个SQL Fiddle,它演示了逻辑。
你可以用这个
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.