PostgreSQL 连表UPDATE

PostgreSQL 手册上的update语法如下:

[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
    SET { column_name = { expression | DEFAULT } |
          ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) |
          ( column_name [, ...] ) = ( sub-SELECT )
        } [, ...]
    [ FROM from_list ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

下面是根据A表更新B表的例子:

--创建表A:t_1
create table t_1
(
id int,
t_id varchar(200),
name varchar(20)
);
 
--插入数据到表A:t_1
insert into t_1 values (1,'1','a');
insert into t_1 values (2,'2','a');
insert into t_1 values (3,'3','a');
insert into t_1 values (4,'4','a');
insert into t_1 values (5,'5','b');
insert into t_1 values (6,'6','b');
insert into t_1 values (7,'7','a');
 
--创建表B:t_map
create table t_map
(
old_id varchar(200),
new_id varchar(200)
);
 
--插入数据到表B:t_map
insert into t_map values('1','001');
insert into t_map values('2','002');
insert into t_map values('3','003');
insert into t_map values('4','004');
insert into t_map values('5','005');
insert into t_map values('6','006');

 

select * from t_1;

PostgreSQL 连表UPDATE_第1张图片

select * from t_map;

PostgreSQL 连表UPDATE_第2张图片

--根据表t_map的old_id更新表t_1的t_id为表t_map的new_id
update t_1 t
set t_id = map.new_id
from t_map map
where t.t_id = map.old_id
and t.name = 'a'

更新后如下:

select * from t_1 order by id;

PostgreSQL 连表UPDATE_第3张图片

你可能感兴趣的:(数据库,PostgreSQL,连表更新)