postgresql 将firsttable中的所有行替换为secondtable中具有相应ID的行

brvekthn  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(115)

我有两张表:

create table firsttable (id int, speed double precision);
create table secondtable (id int, speed double precision);

insert into firsttable (id) 
values (1), (2);

insert into secondtable (id, speed)
values (1, 12.3), (1, 12.4), (2, 12.43), (2, 11), (2, 13.6), (3,23);

我想用secondtable中的值更新firsttable的speed列
要求结果:
x一个一个一个一个x一个一个二个x

    • 编辑**

答案由Tushar给出:

id  speed
1   null
2   null
1   12.3
1   12.4
2   12.43
2   11
2   13.6
    • 编辑-2**

我试过:

INSERT INTO firsttable (id, speed)
SELECT  id,speed 
FROM secondtable 
WHERE EXISTS (SELECT id FROM firsttable);

id  speed
1   null
2   null
1   12.3
1   12.4
2   12.43
2   11
2   13.6
3   23

但是,前2行和最后一行不应出现在答案中(参见必填答案)。

6jjcrrmo

6jjcrrmo1#

从所需行为的说明来看,标题应该是 * 将Table1中的所有行替换为Table2中具有相应ID的行 *。以下查询将执行此操作:

WITH ids AS
       (DELETE FROM firsttable
         WHERE id IN (SELECT id FROM secondtable)
         RETURNING id)
INSERT
  INTO firsttable (id, speed)
SELECT id, speed
  FROM secondtable
  WHERE id IN (SELECT id FROM ids)
  RETURNING *;

相关问题