我有一个包含拓扑数据的表,字段是x,y,z,渐变,时间戳,用户
现在出现了将数据从一个层复制到另一个层的问题...... 表示将所有数据从例如(10,20,30)复制到(1200,1900,30)到相同的x,y但是z + 1,并将时间戳和用户更改为实际提交者之一。
我这样编程(php前端),但它非常慢...... 所以我想知道是否有一种聪明的方法直接在SQL中这样做?
答案 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;
如有必要,将localtimestamp
和current_user
替换为您的硬编码值(例如'pipo')
答案 2 :(得分:0)
假设你的问题一般是关于SQL而不是Postgres,那可能是这样的。我通常使用SQL Server和Sybase,但我想Postgres是类似的。
INSERT INTO
SomeTable (x,y,z,...)
SELECT
x, y, z+1, ...
FROM
SomeTable
WHERE
...
假设时间戳已自动设置并获得新密钥......