PostgreSQL 支持UPDATE A表 FROM B表的语法吗?
支持,
首先A表和B表需要有关联的列, 关联之后A表和B表应该是多对一或者一对一的关系,
如果是一对多会怎么样呢? 任何数据库都会给你一个不确定的答案
测试如下 :
sar=> create table a (id int primary key, info text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "a_pkey" for table "a"
CREATE TABLE
sar=> create table b (id int, info text);
CREATE TABLE
sar=> insert into a select generate_series(1,10),'digoal';
INSERT 0 10
sar=> insert into b select generate_series(1,10),'Digoal';
INSERT 0 10
sar=> insert into b select generate_series(1,10),'DIGOAL';
INSERT 0 10
sar=> select * from a where id=1;
id | info
----+--------
1 | digoal
(1 row)
sar=> select * from b where id=1;
id | info
----+--------
1 | Digoal
1 | DIGOAL
(2 rows)
执行如下更新之后, a.id 会等于什么呢? 是Digoal, 还是DIGOAL.
sar=> update a set info=b.info from b where a.id=b.id and a.id=1;
UPDATE 1
sar=> select * from a where id=1;
id | info
----+--------
1 | Digoal
(1 row)
看起来是第一次匹配到的B表的那条记录的info值.
所以在做多表关联的更新操作时, 需要注意这一点.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。