Mysql 合并两个表并更新ID匹配的单元格
我有两个表,其中包含我希望合并的客户数据。一个是2013-2017年的旧数据,另一个是2018年的数据 我基本上希望使用UNION将旧数据粘贴到新数据下,这非常简单。但是,我有两个表中都存在的老客户(可以在customer_id上加入) 理想情况下,我编写的查询将执行以下操作: 如果新数据中存在客户id,它将仅使用oldtable.starting\u date更新newtable.starting\u date 如果新数据中不存在客户id,则整行将添加到表中Mysql 合并两个表并更新ID匹配的单元格,mysql,sql,duplicates,sql-update,sql-insert,Mysql,Sql,Duplicates,Sql Update,Sql Insert,我有两个表,其中包含我希望合并的客户数据。一个是2013-2017年的旧数据,另一个是2018年的数据 我基本上希望使用UNION将旧数据粘贴到新数据下,这非常简单。但是,我有两个表中都存在的老客户(可以在customer_id上加入) 理想情况下,我编写的查询将执行以下操作: 如果新数据中存在客户id,它将仅使用oldtable.starting\u date更新newtable.starting\u date 如果新数据中不存在客户id,则整行将添加到表中 我正在MySQL中执行此操作。是否
我正在MySQL中执行此操作。是否希望
插入。。。在重复键上
要使其工作,您需要在目标表中的列customer\u id
上使用唯一或主键
假设两个表都有三列(customer\u id
,starting\u date
,ending\u date
),则可以将查询表述为:
insert into newtable (customer_id, starting_date, ending_date)
select customer_id, starting_date, ending_date
from oldtable
on duplicate key update starting_date = values(starting_date)
MySQL不支持完全外部联接。但你可以做到:
select coalesce(o.starting_date, n.starting_date) as starting_date,
. . .
from newdata n left join
olddata o
on n.customer_id = o.customer_id
union all
select . . .
from olddata o
where not exists (select 1 from newdata n where n.customer_id = o.customer_id);
INSERT。。关于重复密钥更新
请参见“插入”下的手册