PostgreSQL, как скопировать группу записей при изменении некоторых значений? - PullRequest
3 голосов
/ 23 марта 2011

у меня есть таблица с топологическими данными, поля: x, y, z, градиент, отметка времени, пользователь

теперь возникает проблема копирования данных из одного слоя в другой ... означает скопировать все данные, скажем, от (10,20,30) до (1200,1900,30) в те же x, y, но z + 1, и изменить метку времени и пользователя на единицу фактического отправителя.

Я сделал это программно (PHP-интерфейс), но это очень медленно ... так что я задавался вопросом, был ли умный способ сделать это непосредственно в SQL?

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Немного догадавшись о вашем намерении:

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

1 голос
/ 23 марта 2011
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 голосов
/ 23 марта 2011

Предполагая, что ваш вопрос касается SQL в целом, а не Postgres, это, вероятно, что-то вроде этого. Я обычно использую SQL Server и Sybase, но я думаю, что Postgres похож.

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

Предполагается, что отметка времени устанавливается автоматически и получает новые ключи ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...