我有一个表DOMAINS
,它有两个不同的模式,列分别为ID
、NAME
、CODE
和DESCRIPTION
。
对于新模式中存在的任何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
的部分?*
3条答案
按热度按时间ctrmrzij1#
对于您的情况,无需使用部件:
第一个月
(* 使用
WHEN MATCHED THEN UPDATE SET a.id = a.id
是可以接受的(Oracle不会抛出),但没有任何影响,因此,这种用法是多余的,因为您不想为匹配的大小写更改任何内容。)如果您想更改,则添加
WHEN MATCHED THEN UPDATE SET a.id = b.id
在
WHEN NOT MATCHED THEN INSERT...
之前( 例如,Oracle支持
WHEN MATCHED THEN UPDATE
语法。请参阅下面的演示 *)Demo
顺便说一句,
USING
关键字后面的部分不必是***子查询***,而是***表***或***视图***。针对当前案例进行评估后:在创建**
v_domains
**view through后,可以像上面的语句一样使用jdg4fx2g2#
Oracle SQL语法不支持任何
when matched then update
子句。jk9hmnmh3#
为什么不使用
并入A
使用B
在...
当不匹配时
...
我已经验证过了。