ITPub博客

首页 > 数据库 > 国内数据库 > lightdb的merge into使用介绍

lightdb的merge into使用介绍

原创 国内数据库 作者:Hanson69 时间:2022-04-13 18:17:14 0 删除 编辑

MERGE 操作可以将源表和目标表中的记录进行合并,当源表和目标表的记录匹配时,对匹配的记录可以进行更新操作,

当源表和目标表的记录不匹配时,可以将源表中不匹配的记录插入到目标表中。但是必须对目标表拥有 INSERT 和 UPDATE 权限,对源表拥有SELECT 权限。

具体语法定义如下:

MERGE INTO target_table_name [ [ AS ] target_alias ]
USING data_source
ON join_condition
when_clause [...]
where data_source is
{ source_table_name |
( source_query )
}
[ [ AS ] source_alias ]
and when_clause is
{ WHEN MATCHED THEN { merge_update } |
WHEN NOT MATCHED THEN { merge_insert }
}
and merge_insert is
INSERT [( column_name [, ...] )]
{ VALUES ( { expression | DEFAULT } [, ...] ) | DEFAULT VALUES
}
[ WHERE condition ]
and merge_update is
UPDATE SET { column_name = { 
    expression | DEFAULT } |
( column_name [, ...] ) = ( { 
    expression | DEFAULT } [, ...] )
} [, ...]
[ WHERE condition ]



参数说明:

INTO子句:指定更新或插入的目标表。

target_table_name :目标表的表名。
target_alias :目标表的别名。
USING子句:指定源表,源表可以为表、视图或子查询。
ON子句:关联条件,用于指定目标表和源表的关联条件。
WHEN MATCHED子句:当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。
WHEN NOT MATCHED子句:当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。不支持INSERT子句中包含多个VALUES。
DEFAULT用对应字段的缺省值填充该字段。如果没有缺省值,则为NULL。

WHERE condition: UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。


示例

CREATE TABLE target (  
    id       integer       primary key ,
    name     char(20) ,
    altitude int,
    address  char(20)   not null
);
CREATE TABLE source (  
    id       integer       primary key ,
    name     char(20) ,
    altitude int,
    address  char(20)   not null
);
INSERT INTO target values(1,'a', 90, 'shanghai');
INSERT INTO target values(2,'i', 100, 'xianyang');
INSERT INTO target values(5,'c', 99,'chengdu');
insert into source values(1,'a', 90, 'nanjing');
insert into source values(3,'d', 80, 'hangzhou');
-- 将target中和source匹配的记录的address字段 更新为source中的address值 
MERGE INTO target t
USING source AS s
ON t.id = s.id
WHEN MATCHED THEN
	UPDATE SET address = s.address;
table target;
 id |         name         | altitude |       address
----+----------------------+----------+----------------------
  1 | a                    |       90 | shanghai
  2 | i                    |      100 | xianyang
  5 | c                    |       99 | chengdu
(3 rows)
-- 将source中不存在于target的记录插入到target中 
MERGE INTO target t
USING source AS s
ON t.id = s.id
WHEN NOT MATCHED THEN
	INSERT VALUES(s.id, s.name, s.altitude, s.address);
	
table target;
 id |         name         | altitude |       address
----+----------------------+----------+----------------------
  2 | i                    |      100 | xianyang
  5 | c                    |       99 | chengdu
  1 | a                    |       90 | nanjing
  3 | d                    |       80 | hangzhou
(4 rows)



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69982913/viewspace-2886973/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
专注于PostgreSQL数据库的研究

注册时间:2020-08-30

  • 博文量
    16
  • 访问量
    11392