Oracle的merge into 语法

MERGE INTO t1

USING (SELECT id,name FROM t2) t2

ON ( t1.id=t2.id)   //主键

WHEN MATCHED THEN   //匹配则更新

UPDATE SET T1.name= t2.name

WHEN NOT MATCHED THEN     //不匹配则插入

INSERT (id,name) VALUES (t2.id,t2.name);

merge into 的核心其实就是当有记录存在,则update;不存在,则insert。

pg对应的是upsert语法,其核心都是一样的,有则更新,无则插入;

在postgre9.5之前,其upsert语法如下:

WITH upsert AS (
UPDATE test1
SET col1 = test2.col1
FROM test2
WHERE test1.id = test2.id
RETURNING test1.*
)
INSERT INTO test01
SELECT *
FROM test2
WHERE NOT EXISTS (
SELECT 1
FROM upsert b
WHERE test2.id = b.id
);

在postgre9.5及之后,Oracle的 merge into  转化为 -- >PostgreSQL 的 INSERT INTO ...  ON CONFLICT .. update...

例如:

insert into t1 select id,name from t2 ON CONFLICT(id) do update set name=excluded.name where t1.id=excluded.id;

也可以写成 insert into ()values()ON CONFLICT(主键列表)  do update set name=excluded.name ... where ...

最新文章

  1. 【CSS进阶】CSS 颜色体系详解
  2. 使用 github + jekyll 搭建个人博客
  3. java 27 - 10 反射之 动态代理的代码实现
  4. SQLite剖析之内核研究
  5. 中国Linux源镜像站大全
  6. Spark和hadoop的关系
  7. 再探Java基础——throw与throws
  8. 【剑指offer 面试题14】调整数组顺序使奇数位于偶数前面
  9. Django Errors Archive
  10. 关于 jsp:include 传参的用法
  11. VMware 安装centOS6.4虚拟机以及基础环境搭建
  12. wamp mysql 创建主从数据库
  13. 1.初入GitHub
  14. FREERTOS学习笔记
  15. 关于 登录框的测试的一些case
  16. 2009 Putnam Competition B3
  17. 用kettle从mysql中使用存储过程读取数据写入到sqlserver数据库
  18. 微信小程序顶部(navigationBar)设置为透明
  19. P4363 [九省联考2018]一双木棋chess
  20. 安装JavaFX Scene Builder,并配置到Eclipse

热门文章

  1. 使用java代码调用rabbitmq接口进行新增编辑mq用户、虚拟机vhost、动态创建交换机exchange、队列queue以及设置权限,绑定vhost与exchange等操作
  2. 完整数据分析流程:Python中的Pandas如何解决业务问题
  3. 1.MAC获取文件路径;2.MAC使用SSH连接远程服务器,实现文件上传下载
  4. 主线程-创建Thread类的子类
  5. 如何找到CSDN中关注的用户和粉丝?
  6. 在GCP的Kubernetes上安装dapr
  7. 2023牛客寒假算法基础集训营5 A-L
  8. Java的两个好用的工具包 Apache commons
  9. JAVA虚拟机02---JAVA虚拟机运行时数据区域简介
  10. IIS服务器SSL证书安装 (pfx文件不能直接运行时)