Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 合并两个表并更新ID匹配的单元格_Mysql_Sql_Duplicates_Sql Update_Sql Insert - Fatal编程技术网

Mysql 合并两个表并更新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中执行此操作。是否

我有两个表,其中包含我希望合并的客户数据。一个是2013-2017年的旧数据,另一个是2018年的数据

我基本上希望使用UNION将旧数据粘贴到新数据下,这非常简单。但是,我有两个表中都存在的老客户(可以在customer_id上加入)

理想情况下,我编写的查询将执行以下操作:

如果新数据中存在客户id,它将仅使用oldtable.starting\u date更新newtable.starting\u date

如果新数据中不存在客户id,则整行将添加到表中


我正在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。。关于重复密钥更新
请参见“插入”下的手册