merge源表数据移植到目标表新表数据中
merge into dbo.ak_SloteCardTimes a using(select RecordID,CardNO,SloteCardTime from dbo.Tb_CardDate b ) c on(a.RecordID=c.RecordID)
when matched then update set a.CardNO=c.CardNO ,a.SloteCardTime=c.SloteCardTime
when not matched then insert(RecordID,CardNO,SloteCardTime)
values(c.RecordID,c.CardNO,c.SloteCardTime);
知识温故和梳理引用:
创建表一为源表:
CREATE TABLE Product
(
ProductID varchar(7) NOT NULL PRIMARY KEY,
ProductName varchar(100) NOT NULL,
Price decimal(13,2) DEFAULT 0
); INSERT INTO Product
Values
('4100030','iPhone5c',5500),
('4100031','iPhone4',3200),
('4100037','iPhone5s',5500),
('4100038','iPhone4s',3200);
目标表:
CREATE TABLE ProductNew
(
ProductID varchar(7) NOT NULL PRIMARY KEY,
ProductName varchar(100) NOT NULL,
Price decimal(13,2) DEFAULT 0
);
--MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步
--显然Product与ProductNew表的MERGE匹配条件为主键ProductID字段,初始情况下,ProductNew表为空,此时肯定执行的是WHEN NOT MATCHED THEN后的语句,我们先只考虑源表递增的情况,MERGE语句如下:
MERGE ProductNew AS d
USING Product AS s
ON s.ProductID = d.ProductId
WHEN NOT MATCHED THEN
INSERT( ProductID,ProductName,Price)
VALUES(s.ProductID,s.ProductName,s.Price); --现在,我们更新Product表4100030产品的价格,将其修改为9500:
--我们也希望每天同步的时候应该将更新后的价格同步到ProductNew表,显然此时在MERGE语句中应该添加WHEN MATCHED THEN 语句,该语句来更新ProductNew表的价格,添加匹配更新后的MERGE语句:
MERGE ProductNew AS d --目标表
USING Product AS s --源表
ON s.ProductID = d.ProductId --匹配条件
WHEN NOT MATCHED THEN
INSERT( ProductID,ProductName,Price)
VALUES(s.ProductID,s.ProductName,s.Price)
WHEN MATCHED THEN
UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
-- 我们的UPDATE语句里面没有更新ProductID字段,因为这是完全没必要的(如果修改了ProductID字段会直接走到NOT MATCHED)。
--假如我么会把源表删除一条数据 即源表存在三条数据而 目标表有四条数据
-- WHEN NOT MATCHED BY TARGET 表示目标表不匹配,BY TARGET是默认的
--WHEN NOT MATCHED BY SOURCE 表示源表不匹配,即目标表中存在,源表中不存在的情况。现在我们要完成源表DELETE后,目标表的同步动作,MERGE语句如下:
MERGE ProductNew AS d
USING Product AS s
ON s.ProductID = d.ProductId
WHEN NOT MATCHED BY TARGET --表示目标表不匹配,BY TARGET是默认的
THEN
INSERT( ProductID,ProductName,Price)
VALUES(s.ProductID,s.ProductName,s.Price)
WHEN NOT MATCHED BY SOURCE --表示源表不匹配,即目标表中存在,源表中不存在
THEN
DELETE
WHEN MATCHED THEN
UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
merge源表数据移植到目标表新表数据中的更多相关文章
- Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表
A库a表(红色为抽取字段): 关联用户表: B库b表(红色为抽取字段): 关联用户表 C目标库SYS_OPLOG表(c表) 利用kettle抽取A库a表(具体名称见上图),B库b表的上面红色框起来 ...
- Mysql5.7 单表 500万数据迁移到新表的快速实现方案
开发过程中需要把一个已有500万条记录的表数据同步到另一个新表中,刚好体验下Mysql官方推荐的大数据迁移的方案:SELECT INTO OUTFILE,LOAD DATA INFILE Mysql ...
- ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)
当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...
- MySQL之DDL数据定义语言:库、表的管理
库的管理 常用命令 #创建库 create database if not exists 库名 [ character set 字符集名]; create database if not exists ...
- Oracle-创建新表,创建备份表,对表中插入多条数据
一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...
- mysql ---复制表结构---创建新表
1.复制表结构及数据到新表CREATE TABLE 新表SELECT * FROM 旧表这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable;来删 ...
- JS基础-表单元素-新表单元素-js概述
1.表单元素 1.input元素 1.隐藏域和文件选项框 1.隐藏域 <input type="hidden"> 要提交给服务器的数据,但是不想展示给用户看可以放在隐藏 ...
- MySQL复制表结构和内容到另一个表中
一:(低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)1.复制表结构到新表CREATE TABLE 新表LIKE 旧表 2.复制旧表的数据到新表(假设两个表结构一样) ...
- php源码建博客5--建库建表-配置文件-错误日志
主要: 整理框架 建库建表 配置文件类 错误日志记录 --------------本篇后文件结构:-------------------------------------- blog ├─App │ ...
随机推荐
- Android——SD卡工具类——SDCardUtils.java
package com.xdsjs.save.utils; /** * SD卡相关的辅助类 * Created by xdsjs on 2015/10/13. */ import java.io.Fi ...
- quartz实现定时任务调度
一. 业务需求: 实际工作中我们一般会遇到这种需求: 使用Ajax技术每隔几秒从缓存或数据库中读取一些数据, 然后再显示在页面上, 眼下有一个比較好的定时调度框架: quartz能够满足我们的需求. ...
- vs2013没有代码提法的一种解决办法
把这两个勾去掉,然后关掉vs再打开,最后重新勾选上就行了.
- tarfile模块可以方操作tar归档文件
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python自带的tarfile模块可以方便读取tar归档文件 #http://www.open-open. ...
- CentOS 6.4 配置DNS
vi /etc/resolv.conf 写入以下内容并保存: nameserver x.x.x.x 重启服务以生效: service network restart
- 微信小程序-自定义底部导航
代码地址如下:http://www.demodashi.com/demo/14258.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- result_charts
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- LinkedHashMap插入无序且链式操作
Iterator<Entry<Integer, Integer>> ite=lhmap.entrySet().iterator(); ite.next(); ite.remov ...
- centos7安装MySQL5.7无法设置密码问题
前言 在使用centos7系统yum方式安装MySQL5.7后 不知道默认密码是多少 知道后没办法修改? 一.找到MySQL密码 service mysqld start vim /var/log/ ...
- useradd或者userdel相关用户管理命令不好用
前言 有时使用useradd或者userdel会出现如下报错: userdel: cannot open /etc/passwd 很明显是/etc/passwd文件导致的 一.查看以及改变文件状态 [ ...