DB2使用MERGE INTO语句实现西虹市首富的新增及更新操作

首先我们新建一张名为XIHONGSHISHOUFU的表,这张表是评委会初步评选出的西虹市首富的候选人员,下面的SQL语句包含建表和插入数据的部分:

CREATE TABLE XIHONGSHISHOUFU (
    REGION_ID INTEGER,
    NAME VARCHAR(20),
    MONEY DECIMAL(20,2),
    AGE INTEGER
);
INSERT INTO XIHONGSHISHOUFU VALUES
(101,‘小明‘,100.00,30),
(102,‘小王‘,200.00,35),
(104,‘小李‘,300.00,25);

这张表的数据展示如下:

REGION_ID NAME MONEY AGE
101 小明 100.00 30
102 小王 200.00 35
104 小李 300.00 25

我们这里简单地解释一下上面的数据,XIHONGSHISHOUFU这张表包含了如下信息:

  • REGION_ID:区号;
  • NAME:这个区目前评审出的最有钱人的姓名;
  • MONEY:这个区最有钱的人的资产估值;
  • AGE:这个人的年龄。

然而呢,接下来评委会收到了一张新的名单,是之前以往的一些有钱人的清单。

所以评委会现在需要做的是更新一下数据,从而得到新的西渱市首富清单。

新的有钱人清单的表结构和上面的表是一样的,下面是这张表SHOUFU_BACKUP的建表和插入数据的SQL语句:

CREATE TABLE SHOUFU_BACKUP (
    REGION_ID INTEGER,
    NAME VARCHAR(20),
    MONEY DECIMAL(20,2),
    AGE INTEGER
);

INSERT INTO SHOUFU_BACKUP VALUES
(101,‘丁丁‘,50.00,20),
(102,‘东东‘,500.00,30),
(103,‘可可‘,700.00,25),
(104,‘乐乐‘,800.00,15);

这张表的数据展示如下:

REGION_ID NAME MONEY AGE
101 丁丁 50.00 20
102 东东 500.00 30
103 可可 700.00 25
104 乐乐 800.00 15

接下来我需要将SHOUFU_BACK表中的数据更新到XIHONGSHISHOUFU表中,使得,新的数据能够体现出每个区对应的首富,并且18岁以下的人不能参与这次评选(18岁以下的人应该在学校里面好好读书),所以接下来我们可以使用MERGE INTO语句来实现这个“能改就改,不能改就插”的效果,SQL语句如下:

MERGE INTO XIHONGSHISHOUFU A
USING SHOUFU_BACKUP B
ON A.REGION_ID=B.REGION_ID
WHEN MATCHED AND b.AGE>=18 THEN UPDATE SET
(REGION_ID,NAME,MONEY,AGE)=(B.REGION_ID,B.NAME,B.MONEY,B.AGE)
WHEN NOT MATCHED AND B.AGE>=18
THEN INSERT VALUES (B.REGION_ID,B.NAME,B.MONEY,B.AGE)

此时再去查看一下XIHONGSHISHOUFU的清单,得到结果如下:

REGION_ID NAME MONEY AGE
101 丁丁 50.00 20
102 东东 500.00 30
104 小李 300.00 25
103 可可 700.00 25

可以看到,首富的信息,能更新的都已经更新了,能新增的都已经新增了,并且18岁以下的青少年并没有参与本次评选。

原文地址:https://www.cnblogs.com/zifeiy/p/10337866.html

时间: 2024-10-29 11:03:33

DB2使用MERGE INTO语句实现西虹市首富的新增及更新操作的相关文章

观《西虹市首富》有感之假如我有三百亿......

X点击此处添加图片说明文字 ? 注意:没看过电影的,慎点,慎看,以下有些许剧情透露! 昨天下班之后,公司的阿姨放假,没有做饭,晚饭自行解决,顿时我那个气呀,不过没办法,也不是针对我,所以就放弃反对,下班了! 正在犹豫吃一顿饭还是去看一场电影的时候,考虑了三秒,我选择了后者.别问我为什么不能吃完晚饭再去看电影! 所幸,这部<西虹市首富>电影,的确很精彩,没有让我失望,让我颇有感悟!现在来谈谈感受! 首先这部片定位是一个搞笑的喜剧片,但不仅仅是搞笑,这背后很多让人深思的现实现象! 比如:王多鱼面对

程序员版《西虹市首富》在APICloud上映了?

<西虹市首富>上映4天票房轻松破10亿,貌似比王多鱼一个月要花光十亿的任务看起来轻松简单的多-从片子的火爆程度不难看出大部分人应该跟小编一样内心深处都有一个"一夜暴富"的美丽梦想,只不过一直还没有实现,这次借着<西虹市首富>这部电影内心又暗戳戳yy一把过过瘾. 当然,小编相信还有一小部分人肯定不会像小编一样这么简单直接又天天梦想着一夜暴富而导致不能好好工作,比如我们勤勤恳恳的程序员小哥哥们.毕竟在小编心里,程序员小哥哥们天天忙着码代码连睡觉的时间都没有哪有时间跟

使用Merge Into 语句实现 Insert/Update

网址: http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert). 实战: 接下来我们有一个任务,有一个表T,有两个字段a,b,我们想在表T中做Insert/Up

ORACLE MERGE INTO语句,unable to get a stable set of rows in the source tables报错解决

ORACLE数据库,MERGE INTO语句,经常会出现  ORA-30926: unable to get a stable set of rows in the source tables   这个错误,如下图所示: 经检查,这个错误是由于数据来源表(即语句中,from关键字后面的表)存在数据重复造成的.在实际项目研发中,我们一般不能随便改动数据表的记录,那么如何避免这种错误的产生以及如何改正错误呢? 请看下面的SQL: MERGE INTO TEMP_ZL_ACCOUNTLIST t1 U

Merge into语句用法及其效率问题

Merge into语句用法及其效率问题 /*Merge into 详细介绍MERGE语句用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT.这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE. *//*語法:MERGE [INTO [schema .] table [t_alias] USING [schema .] { table | vi

《Oracle每日一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert). 实战: 接下来我们有一个任务,有一个表T,有两个字段a,b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录.在Microsoft的SQL语法中,很简单的一句判断就可

纪念我人生中第一个merge into语句

做按组织关系汇总功能时,当数据量特别大,或者汇总组织特别多时,运行效率特别低,于是使用了merge into语句. 代码如下: public void updateInsertData(DataSet dsl, String mxnm, DataSet dsc, DataSet dsr, String faslnm, DataSet dyxjDs, String thisBbnm, String tabname, DataSet glDs,String flnm,String dyzzNm,in

Merge Into 语句代替Insert/Update在Oracle中的应用实战

动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert). 实战: 接下来我们有一个任务,有一个表T,有两个字段a,b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录.在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL S

DB2中常用SQL语句

DB2 提供了关连式资料库的查询语言sql(structured query language),是一种非常口语化.既易学又易懂的语法.此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(ddl)以及资料的处理(dml).sql原来拼成sequel,这语言的原型以"系统 r"的名字在 ibm 圣荷西实验室完成,经过ibm内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统r 的技术基础发展出来 ibm 的产品.而且美国国家标准学会(ansi)