sql - 如何更新表中的数据以将结果存储在另一个表中
问题描述
如何在更改某些值的同时将表复制到另一个表?
我的意思是例如:
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'))
....
但如何?
解决方案
要将行从一个表复制到另一个,您可以使用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')) ;