gpt4 book ai didi

sql - MERGE表,匹配时不执行任何操作

转载 作者:行者123 更新时间:2023-12-04 13:21:55 26 4
gpt4 key购买 nike

我有2种不同模式的表DOMAINS,其中包括IDNAMECODEDESCRIPTION列。

对于新模式中存在的任何NAME,它应使用现有的ID,而不进行任何合并;对于那些新的NAME记录,它应该与旧模式中的ID一起插入。

MERGE INTO DOMAINS A
USING (SELECT ID,NAME,CODE,DESCRIPTION FROM <Old Schema 6.1>.DOMAINS@DB_MIG_61_TO_74) B
ON(A.NAME = B.NAME)
WHEN MATCHED **<do nothing>**
WHEN NOT MATCHED THEN INSERT(A.ID,A.NAME,A.CODE,A.DESCRIPTION)
VALUES(B.ID,B.NAME,B.CODE,B.DESCRIPTION);

如何解释上述查询中 do nothing的部分?

最佳答案

对于您的情况,无需使用以下部分:
when matched then update ...
(使用when matched then update set a.id = a.id是可以接受的(Oracle不会抛出错误),但是没有影响,因此,这种用法是多余的,因为您不想为匹配的情况更改任何内容。)

If you wanted to change, then add

when matched then update set a.id = b.id

before when not matched then insert...

( e.g.Oracle supports when matched then update syntax. Refer the Demo below )



针对当前情况继续进行以下操作:
SQL> create table domains( id int, name varchar2(50), code varchar2(50), description varchar2(50));

SQL> insert into domains values(1,'Domain A','D.A.','This is Domain A');

SQL> merge into domains A
using
(select 2 id, 'Domain A' name, 'D.A.' code, 'This is Domain A' description from domains) b
on ( a.name = b.name )
when not matched then insert( a.id, a.name, a.code, a.description )
values( b.id, b.name, b.code, b.description );

SQL> select * from domains;

ID NAME CODE DESCRIPTION
-- -------- ----- ----------------
1 Domain A D.A. This is Domain A

SQL> delete domains;

SQL> insert into domains values(1,'Domain A','D.A.','This is Domain A');
-- we're deleting and inserting the same row again

SQL> merge into domains A
using
(select 2 id, 'Domain B' name, 'D.B.' code, 'This is Domain B' description from domains) b
on ( a.name = b.name )
when not matched then insert( a.id, a.name, a.code, a.description )
values( b.id, b.name, b.code, b.description );

ID NAME CODE DESCRIPTION
-- -------- ----- ----------------
1 Domain A D.A. This is Domain A
2 Domain B D.B. This is Domain B

Demo

关于sql - MERGE表,匹配时不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49848995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com