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;