2011-03-23 26 views
3

我有拓扑的数据的表,字段是X,Y,Z,梯度,时间戳,用户PostgresSQL如何在改变某些值的同时复制一组条目?

现在出现从一个层的数据复制到其他的问题... 装置从所有数据复制的发言权(10,20,30)到(1200,1900,30)到相同的x,y,但z + 1,并将时间戳和用户更改为实际提交者之一。

我做了这个编程(PHP的前端),但它非常缓慢... 所以我想知道如果有一个聪明的方式直接在SQL中做这个?

+0

哪些字段是'10,20,30'? – Quassnoi 2011-03-23 14:33:53

+0

@Quassnoi'(10,20,30)到(1200,1900,30)到相同的x,y但是z + 1':看起来他们是x,y和z – 2011-03-24 11:43:54

回答

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) 
+0

-1,因为问题没有提到字段叫'layerN',因为$ current_user不是'SQL直接' – 2011-03-24 11:35:19

0

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

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

假设时间戳自动设置,并得到新的钥匙......

+0

好!这是第一步:D谢谢!不幸的是,由于基础接受变更集,我不能自动设置时间戳,也有用户设置,任何方式设置字段为'常量'值?例如;选择x,y,z + 1,user ='pipo',timestamp = somevalue? – bboett 2011-03-23 17:55:21

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')

相关问题