开发者社区> 问答> 正文

PostgreSQL 支持UPDATE A表 FROM B表的语法吗?

PostgreSQL 支持UPDATE A表 FROM B表的语法吗?

展开
收起
德哥 2015-12-30 14:06:54 6388 0
1 条回答
写回答
取消 提交回答
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.
    支持,
    首先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值.
    所以在做多表关联的更新操作时, 需要注意这一点.
    2019-07-17 18:23:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgreSQL 物联网六脉神剑 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载