PostgreSQL Update 根据B表更新A表

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;

  

select * from t_map;

  

--根据表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 oder by id;

  

 

posted @ 2018-01-30 17:04  ChrisSnow  阅读(27073)  评论(1编辑  收藏  举报