Вставьте ежедневную таблицу в основную таблицу и обновите строку в основной таблице, если ключ существует - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь вставить ежедневную таблицу в основную таблицу, в которой есть первичные ключи. У меня есть следующая архитектура:

A python сценарии, которые генерируют данные в pandas dataframe-> удаляет ежедневную таблицу -> передает в ежедневную таблицу -> передает данные из ежедневной таблицы в основной стол.

Я не могу удалить основной стол, но я могу удалить ежедневный стол. В настоящее время я использую следующий запрос для выполнения этого:

 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, но это не удалось заставить его работать.

Есть ли способ вставить новые строки из ежедневной таблицы в основную таблицу и обновить существующие строки в основной таблице? В структуру таблицы вносятся почти ежедневные изменения, и я хотел бы избежать необходимости вручную определять столбцы.

1 Ответ

1 голос
/ 18 февраля 2020

Да, это похоже на хороший вариант использования для синтаксиса INSERT ... ON DUPLICATE KEY.

Предполагая, что первичный ключ вашей таблицы называется id, и у вас есть 3 других столбца col1, col2, col3, который вы хотите обновить на дубликате id, который будет выглядеть так:

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
...