如何在postgresql中,一句sql完成未有数据记录的insert,再update的操作

下面是sql语句:

insert into jd_api_data_20200116 (id,name) select id,city from province_and_city as a where id = 1 on conflict(id) do update set name = EXCLUDED.name;

详解:

首先呢,基础语法是这样的:

insert into xxx on conflict(pkkey) do xxx;

这是一个插入语句触发器(需要一个主键或者唯一索引),当原本数据库有这条唯一索引的数据时,执行触发器后语句,否则执行insert语句.

然后呢,上面这句,先执行select 查询语句,查询该id对应的记录的id,city字段值,然后执行insert语句,将查询的字段值insert到新表中,如果已存在该记录,那么执行do触发器后的update语句.

这里update语句中的EXCLUDE.xxx表示前面查询语句对应的字段值

原文地址:https://www.cnblogs.com/yiduobaozhiblog1/p/12604205.html