sql - 合并/更新查询以更新
问题描述
我有两个名为 CONTACT 和 ROLES 的表。
联系表如下所示
CONTACT_ID | 名 | 姓 | 电话 |
---|---|---|---|
59285 | AAA | BBB | 99999 |
59281 | AAA | BBB | 99999 |
59288 | ZZZ | 年年 | 11111 |
59282 | ZZZ | 年年 | 11111 |
基本上不同的联系人 ID,但相同的 FIRST_NAME、LAST_NAME、PHONE
角色表看起来像
CONTACT_ID |
---|
59285 |
59281 |
59288 |
59282 |
我想更新 ROLES 表,将联系人表引用到重复联系人 ID 的最小值,以便 ROLES 表看起来像
CONTACT_ID |
---|
59281 |
59281 |
59282 |
59282 |
我正在尝试使用合并
MERGE INTO ROLES T1 USING(
SELECT
MIN(CONTACT_ID) OVER (PARTITION BY FIRST_NAME, LAST_NAME, PHONE) AS min_contact_id
FROM CONTACT
) T2 ON (T1.ROWID = T2.ROWID) WHEN MATCHED THEN
UPDATE
SET T1.CONTACT_ID = T2.min_contact_id;
但它只是将输出合并为 0 行。
解决方案
您需要将 MERGE 语句更新为简单的 UPDATE 语句 -
UPDATE ROLES R
SET CONTACT_ID = (SELECT MIN_CONTACT_NO
FROM (SELECT CONTACT_ID, MIN(CONTACT_ID) OVER (PARTITION BY FIRST_NAME, LAST_NAME, PHONE) MIN_CONTACT_NO
FROM LOOKS) L
WHERE L.CONTACT_ID = R.CONTACT_ID);
因为他们的 ROWID 永远不会相同,这在您的查询中是不正确的。
推荐阅读
- regex - 我需要一个正则表达式来提取分隔符之间的特定字符
- jenkins-pipeline - 如何在 Jenkins 管道中的 zip 文件管道实用程序插件中排除 Jenkinsfile 和自动化脚本
- uvm - 在模拟运行时更改 uvm 详细程度
- python - Pandas Dataframe 时移列
- leaflet - 传单层在缩小时格式不正确
- python - python的舍入问题(实现Karatsuba的算法)
- c - 原始以太网 MAC 目标地址
- jquery - Jquery Chosen - 销毁方法不起作用
- cordova - cordova-hot-code-push-plugin 删除其他已安装的 ionic cordova 本机插件
- javascript - 如何从嵌入式数组中删除对象?