首页 > 解决方案 > 合并/更新查询以更新

问题描述

我有两个名为 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 行。

标签: sqloracle

解决方案


您需要将 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 永远不会相同,这在您的查询中是不正确的。

DB小提琴。


推荐阅读