我有拓扑的数据的表,字段是X,Y,Z,梯度,时间戳,用户PostgresSQL如何在改变某些值的同时复制一组条目?
现在出现从一个层的数据复制到其他的问题... 装置从所有数据复制的发言权(10,20,30)到(1200,1900,30)到相同的x,y,但z + 1,并将时间戳和用户更改为实际提交者之一。
我做了这个编程(PHP的前端),但它非常缓慢... 所以我想知道如果有一个聪明的方式直接在SQL中做这个?
我有拓扑的数据的表,字段是X,Y,Z,梯度,时间戳,用户PostgresSQL如何在改变某些值的同时复制一组条目?
现在出现从一个层的数据复制到其他的问题... 装置从所有数据复制的发言权(10,20,30)到(1200,1900,30)到相同的x,y,但z + 1,并将时间戳和用户更改为实际提交者之一。
我做了这个编程(PHP的前端),但它非常缓慢... 所以我想知道如果有一个聪明的方式直接在SQL中做这个?
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,因为问题没有提到字段叫'layerN',因为$ current_user不是'SQL直接' – 2011-03-24 11:35:19
假设你的问题是关于一般的SQL而不是Postgres,那可能是这样的。我通常使用SQL Server和Sybase,但我想像Postgres是相似的。
INSERT INTO
SomeTable (x,y,z,...)
SELECT
x, y, z+1, ...
FROM
SomeTable
WHERE
...
假设时间戳自动设置,并得到新的钥匙......
好!这是第一步:D谢谢!不幸的是,由于基础接受变更集,我不能自动设置时间戳,也有用户设置,任何方式设置字段为'常量'值?例如;选择x,y,z + 1,user ='pipo',timestamp = somevalue? – bboett 2011-03-23 17:55:21
一个有关你的意图一些猜测:如果有必要
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;
更换localtimestamp
和current_user
与硬编码值(例如'pipo')
哪些字段是'10,20,30'? – Quassnoi 2011-03-23 14:33:53
@Quassnoi'(10,20,30)到(1200,1900,30)到相同的x,y但是z + 1':看起来他们是x,y和z – 2011-03-24 11:43:54