首页 > 解决方案 > 如何更新表中的数据以将结果存储在另一个表中

问题描述

如何在更改某些值的同时将表复制到另一个表?

我的意思是例如:

perso=# create table chk ( id serial primary key, Q text , R  text not null unique, p text not null unique) ; 
CREATE TABLE
perso=# select * from chk
perso-# ;
 id | q | r | p 
----+---+---+---
(0 rows)

作为目的地

我会使用来自

perso=# select * from tmp                                                                                     
;
 idt | qt | rt | pt 
-----+----+----+----

我想将数据从 tmp 表复制到 chk 表,并在可能的情况下立即更新 chk 上的数据,因此 chk.p 等于 tmp.tcrypt('t', gen_salt('bf'))

我尝试使用子选择进行复制,但出现了很多不同类型的错误……我无法解释也无法将它们全部粘贴到此处。

短问:更新表中的数据以将结果存储在另一个表中

我想好的方法应该是做类似的事情:

update chk 
set 
   ......
from tmp  (colums, crypt('t', gen_salt('bf'))
....

但如何?

标签: sqlpostgresqlencryptioncopysql-insert

解决方案


要将行从一个表复制到另一个,您可以使用insert ... select. 这是一种非常灵活的语法(该select部分可以使用常规select查询可以使用的所有功能),它可以让您以简单的方式做您想做的事情:

insert into chk (id, q, r, p)
select idt, dt, rt, crypt('t', gen_salt('bf')) 
from tmp

如果您想更新原始表:

update tmp set pt = crypt('t', gen_salt('bf')) ;

推荐阅读