首页 > 解决方案 > 如果键存在,则将每日表插入主表并更新主表中的行

问题描述

我正在尝试将每日表插入到其中包含主键的主表中。我有以下架构:

在熊猫数据框中生成数据的python脚本->删除每日表->推送到每日表->将数据从每日表推送到主表。

我不能删除主表,但我可以删除每日表。目前我正在使用以下查询来执行此操作:

 REPLACE INTO 
    mydb.{to_table}
 SELECT 
    *
 FROM 
     mydb.{from_table};

但我收到以下错误消息:

ERROR (1062, "Duplicate entry '2147483647' for key 'PRIMARY'") with sql 
                REPLACE INTO 
                    mydb.book_authors_v2
                SELECT 
                    *
                FROM 
                    mybd.books_authors_v2_daily;

我试过使用INSERT ... UPDATE ON DUPLICATE KEY,但它没有设法让它工作。

有什么方法可以将日常表中的新行插入主表并更新主表中的现有行?表的结构几乎每天都会发生变化,我想避免手动定义列。

标签: mysqlsqlsql-updatesql-insert

解决方案


是的,这看起来像是INSERT ... ON DUPLICATE KEY语法的一个很好的用例。

假设您的表的主键被称为id,并且您有 3 个其他列col1,您想要更新重复col2,看起来像:col3id

insert into mydb.book_authors_v2(id, col1, col2, col3)
select id, col1, col2, col3
from mybd.books_authors_v2_daily d
on duplicate key update set col1 = d.col1, col2 = d.col2, col3 = d.col3

推荐阅读