sql - 如何在只读源表和更新表之间共享 id
问题描述
我有两个表:第一个 A 是只读的,源表,第二个 B 正在应用程序流中更新(插入新数据)。假设我想用来自 A 的新源数据填充表 B,并且其中一个 A id 已经被 B 通过一些插入“获取”。如何预防此类事件?
解决方案
您正在寻找合并语法,它是 upsert查询(又名更新/插入)的 Oracle 实现。
它是这样的:
merge into tableb b
using tablea a on (a.id = b.id)
when matched then
update set b.col1 = a.col1
when not matched then
insert(id, col1, col2, col3) values(a.id, a.col1, a.col2, a.col3)
该using
子句有on
一部分定义表之间的连接条件。
该matched
子句描述了发生冲突时要做什么:在这里,您可以更新其他一些列。
该not matched
子句执行实际的插入。
推荐阅读
- reactjs - Reactjs wordpress 为 SEO 预渲染现有的客户端应用程序
- sql - 更新 sql 获取多于一行的选择
- java - 如何在 javaFX 中限制/设置帧速率?
- python - 创建列表时检查列表中的值的复杂性
- ios - 如何以编程方式快速定位图层?
- laravel - App\Http\Requests\UserUpdateRequest::user() 的声明应该与 Illuminate\Http\Request::user($guard = NULL) 兼容
- arduino - Win10 <-> USB <-> Arduino - 与 Autohotkey 通信的问题
- objective-c - 在 Objective-C 目标中使用 Swift 的问题
- python - 用给定的结数拟合样条曲线,但不拟合结位置
- javascript - 在此 JavaScript 代码中找不到错误所在。对“类”语法不太熟悉