mysql marge into_MySql实现Merge Into 功能代码

本文介绍了如何使用MySQL的INSERT ... ON DUPLICATE KEY UPDATE语法来实现Merge Into的功能,通过示例展示了如何合并mds_user_agent和MDS_USER_CHATBOT表中的数据,并根据相同的Email地址更新MDS_USER_SUMMARY_INFO表。详细步骤包括创建表、插入测试数据,以及提供了一段实现数据合并和更新的SQL代码。
摘要由CSDN通过智能技术生成

需求描述

INSERT ... ON DUPLICATE KEY UPDATE Syntax

If you specify an ON DUPLICATE KEY UPDATE clause and a row to be inserted would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row occurs. For example, if column a is declared as UNIQUE and contains the value 1, the following two statements have similar effect:

INSERT INTO t1 (a,b,c) VALUES (1,2,3)

ON DUPLICATE KEY UPDATE c=c+1;

UPDATE t1 SET c=c+1 WHERE a=1;

实现内容源mds_user_agent 和 MDS_USER_CHATBOT 当Email 号相同则合并数据,并更新MDS_USER_SUMMARY_INFO 否则则更新 同时。1.如果目标表字段不为空而源为空则不更新。--创建表

CREATE TABLE mds_user_agent

(

ID MEDIUMINT NOT NULL AUTO_INCREMENT,

CHATID VARCHAR(50),

EMAILADDRESS VARCHAR(50),

DATEOFFIRSTAGENTENGAGEMENT DATETIME ,

PRODUCTID VARCHAR(50),

DATE DATETIME,

PRIMARY KEY (ID)

)

--插入测试数据

INSERT INTO mds_user_agent VALUES (1,'Dxxxhah001','45678@qq.com','2018-03-16 10:26:09','1079','2018-03-20 10:26:09')

INSERT INTO mds_user_agent VALUES (2,'Dxxxhah002','45679@qq.com','2018-03-16 10:34:09','1078','2018-03-20 10:26:10')

--创建表

CREATE TABLE MDS_USER_CHATBOT

(

ID MEDIUMINT NOT NULL AUTO_INCREMENT,

USERID VARCHAR(50),

LASTNAME VARCHAR(50),

FIRSTNAME VARCHAR(50),

AGE INT,

GENDER VARCHAR(50),

OCCUPATION VARCHAR(50),

EMAIL VARCHAR(50),

COUNTRY VARCHAR(50),

FIRST_CREATE_DATE DATETIME,

DATE DATETIME,

PRIMARY KEY (ID))

INSERT INTO MDS_USER_CHATBOT VALUES (1,'9527','Zhang','DaBen',40,'Man','Gobudongshayisi','45678@qq.com','China','2018-03-21 10:26:09','2018-03-20 10:46:09')

INSERT INTO MDS_USER_CHATBOT VALUES (2,'0352','Jia','XiaoMing',21,'Women','Gobudongshayisi','45676@qq.com','China','2018-03-19 10:26:09','2018-03-20 10:56:09')

--目标表创建

CREATE TABLE MDS_USER_SUMMARY_INFO

(

USERID ,

LASTNAME VARCHAR(50),

FIRSTNAME VARCHAR(50),

AGE INT,

GENDER VARCHAR(50),

OCCUPATION VARCHAR(50),

EMAIL VARCHAR(50),

PHONE_NUMBER INT,

WECHAT_ID VARCHAR(50),

FACEBOOK_ID VARCHAR(50),

IMEI_NUMBER VARCHAR(50),

SN_NUMBER VARCHAR(50),

ADDRESS VARCHAR(50),

LENOVOID VARCHAR(50),

MOTOROLAID VARCHAR(50),

PRODUCTID VARCHAR(50),

COUNTRY VARCHAR(50),

CITY VARCHAR(50),

FIRST_CREATE_DATE DATETIME,

DATE DATETIME )

--创建唯一索引

ALTER TABLE MDS_USER_SUMMARY_INFO ADD UNIQUE (EMAIL)

实现代码

INSERT INTO MDS_USER_SUMMARY_INFO

(USERID,

LASTNAME,

FIRSTNAME,

AGE,

GENDER,

OCCUPATION,

EMAIL,

PHONE_NUMBER,

WECHAT_ID,

FACEBOOK_ID,

IMEI_NUMBER,

SN_NUMBER,

ADDRESS,

LENOVOID,

MOTOROLAID,

PRODUCTID,

COUNTRY,

CITY,

FIRST_CREATE_DATE,

DATE)

SELECT LAST_INSERT_ID(), /*序列号*/

C.LASTNAME AS LASTNAME,

C.FIRSTNAME AS FIRSTNAME,

C.AGE AS AGE,

C.GENDER AS GENDER,

C.OCCUPATION AS OCCUPATION,

C.EMAIL AS EMAIL,

5050132 AS PHONE_NUMBER,

'MAKASHI001' AS WECHAT_ID,

'8765421' AS FACEBOOK_ID,

'SN3245698254' AS IMEI_NUMBER,

'SN32456982540325' SN_NUMBER,

'NIUYUEMADAHA' AS ADDRESS,

'5489624' AS LENOVOID,

'36952148' AS MOTOROLAID,

C.PRODUCTID AS PRODUCTID,

C.COUNTRY AS COUNTRY,

'DATONG' AS CITY,

CASE

WHEN DATEOFFIRSTAGENTENGAGEMENT >= FIRST_CREATE_DATE THEN

FIRST_CREATE_DATE

ELSE

DATEOFFIRSTAGENTENGAGEMENT

END FIRST_CREATE_DATE,

NOW() AS DATE /*获取系统当前时间*/

FROM (SELECT IFNULL(A.EMAILADDRESS, B.EMAIL) AS EMAIL,

A.PRODUCTID,

A.DATEOFFIRSTAGENTENGAGEMENT,

B.LASTNAME,

B.FIRSTNAME,

B.AGE,

B.GENDER,

B.COUNTRY,

B.EMAIL AS EMAIL01,

B.OCCUPATION,

B.FIRST_CREATE_DATE

FROM MDS_USER_AGENT A

RIGHT JOIN MDS_USER_CHATBOT B ON A.EMAILADDRESS = B.EMAIL

UNION

SELECT IFNULL(A.EMAILADDRESS, B.EMAIL) AS EMAIL,

A.PRODUCTID,

A.DATEOFFIRSTAGENTENGAGEMENT,

B.LASTNAME,

B.FIRSTNAME,

B.AGE,

B.GENDER,

B.COUNTRY,

B.EMAIL AS EMAIL01,

B.OCCUPATION,

B.FIRST_CREATE_DATE

FROM MDS_USER_AGENT A

LEFT JOIN MDS_USER_CHATBOT B ON A.EMAILADDRESS = B.EMAIL) C

ON DUPLICATE KEY UPDATE

PRODUCTID = IF(VALUES(PRODUCTID) IS NOT NULL,

VALUES(PRODUCTID),

MDS_USER_SUMMARY_INFO.PRODUCTID),

LASTNAME = IF(VALUES(LASTNAME) IS NOT NULL,

VALUES(LASTNAME),

MDS_USER_SUMMARY_INFO.LASTNAME),

FIRSTNAME = IF(VALUES(FIRSTNAME) IS NOT NULL,

VALUES(FIRSTNAME),

MDS_USER_SUMMARY_INFO.FIRSTNAME),

GENDER = IF(VALUES(GENDER) IS NOT NULL,

VALUES(GENDER),

MDS_USER_SUMMARY_INFO.GENDER),

OCCUPATION = IF(VALUES(OCCUPATION) IS NOT NULL,

VALUES(OCCUPATION),

MDS_USER_SUMMARY_INFO.OCCUPATION),

FIRST_CREATE_DATE =

IF(VALUES(FIRST_CREATE_DATE) IS NOT NULL,

VALUES(FIRST_CREATE_DATE),

MDS_USER_SUMMARY_INFO.FIRST_CREATE_DATE);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值