PostgreSQL如何在更改某些值的同时复制一组条目?

时间:2011-03-23 14:30:24

标签: sql postgresql

我有一个包含拓扑数据的表,字段是x,y,z,渐变,时间戳,用户

现在出现了将数据从一个层复制到另一个层的问题...... 表示将所有数据从例如(10,20,30)复制到(1200,1900,30)到相同的x,y但是z + 1,并将时间戳和用户更改为实际提交者之一。

我这样编程(php前端),但它非常慢...... 所以我想知道是否有一种聪明的方法直接在SQL中这样做?

3 个答案:

答案 0 :(得分:1)

INSERT
INTO    mytable (layer1, layer2, layer3, x, y, x, gradient, timestamp, user)
SELECT  1200, 1900, 30, x, y, z + 1, gradient, NOW(), $current_user
FROM    mytable
WHERE   (layer1, layer2, layer3) = (10, 20, 30)

答案 1 :(得分:1)

对你的意图进行一些猜测:

insert into mytable(x, y, z, gradient, "timestamp", "user")
select x, y, z+1, gradient, localtimestamp, current_user
from mytable
where z=30 and x>=10 and x<=1200 and y>=20 and y<=1900;
如有必要,

localtimestampcurrent_user替换为您的硬编码值(例如'pipo')

答案 2 :(得分:0)

假设你的问题一般是关于SQL而不是Postgres,那可能是这样的。我通常使用SQL Server和Sybase,但我想Postgres是类似的。

INSERT INTO
   SomeTable (x,y,z,...)
SELECT
   x, y, z+1, ...
FROM
   SomeTable
WHERE
   ...

假设时间戳已自动设置并获得新密钥......