PG数据库写入一张主键表,主键存在就将数据更新,没有就新增一条记录
业务场景
如下图所示a表
id | name | age |
---|---|---|
1 | aa | 18 |
2 | bb | 19 |
如下图所示b表
id | name | age |
---|---|---|
2 | bb | 30 |
3 | cc | 21 |
需求:b表写入到a表,如果a表主键已经存在就将数据更新,没有就新增一条记录
更新后的a表
id | name | age |
---|---|---|
1 | aa | 18 |
2 | bb | 30 |
3 | cc | 21 |
其中id为2是更新,3是新增进去的
实施方法
实现方法
INSERT INTO (主键,字段一名称,字段二名称) VALUES (修改后的id, 字段一值, 字段二值), (未修改的id,字段一值, 字段二值) ON CONFLICT(主键) DO UPDATE SET 字段一名称=EXCLUDED.字段一名称,字段二名称=EXCLUDED.字段二名称;
具体实现语句
INSERT INTO a (id, name, age)
SELECT id, name, age
FROM b
ON CONFLICT (id) DO UPDATE SET
name =EXCLUDED.name,
age =EXCLUDED.age;