Обновление нескольких столбцов между двумя таблицами с помощью «SET» в MySQL - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть две таблицы, как показано ниже.

Табл. A:

        ResultID(PK) | ImportDate | Comment1
        -------------------------------------
        101          | 25-09-2019 | One
        --------------------------------------
        102          | 25-09-2019 | Two
        --------------------------------------
        103          | 25-09-2019 | Three
        ----------------------------------------

Таблица B:

        ResultID(PK) | ImportDate | Comment2
        -------------------------------------
        101          | 26-09-2019 | new one
        --------------------------------------
        104          | 26-09-2019 | four
        --------------------------------------

Таким образом, результат должен выглядеть следующим образом:

Таблица A:

ResultID(PK) | ImportDate | Comment1
-------------------------------------
101          | 26-09-2019 | new one
--------------------------------------
102          | 25-09-2019 | Two
--------------------------------------
103          | 25-09-2019 | Three
--------------------------------------
104          | 26-09-2019 | four
--------------------------------------

Вопрос: Я хочу получить итоговую таблицу A, как указано вышеесли ResultID сопоставлено между таблицей A и таблицей B, я хочу обновить все столбцы таблицы A из таблицы B для этого ResultID.Если ResultID из таблицы B отсутствует в таблице A, вставьте его в таблицу A.

Что я пробовал в MySQL:

UPDATE TableA 
SET comment1=
(SELECT comment2 FROM TableB WHERE TableA.ResultId=TableB.ResultId);

Над решениемОбновление таблицы выполняется только для одного столбца. Я также пытался использовать ссылку на обновление нескольких столбцов из SQL Server 2005 реализации MySQL REPLACE INTO? , но обновление нескольких столбцов не работает для моих сценариев.

Для моих реальных сценариев - у меня 40 столбцов и 50 000 строк.

Не могли бы вы дать мне подсказку или решение?Спасибо.

1 Ответ

1 голос
/ 26 сентября 2019

Поскольку у вас есть первичный ключ на ResultID, вы можете просто использовать запрос INSERT ... ON DUPLICATE KEY UPDATE для передачи всех данных из TableB в TableA:

INSERT INTO TableA (ResultID, ImportDate, Comment1)
SELECT ResultID, ImportDate, Comment2 FROM TableB
ON DUPLICATE KEY UPDATE
  ImportDate = VALUES(ImportDate),
  Comment1 = VALUES(Comment1);

Вывод:

ResultID    ImportDate  Comment1
101         26-09-2019  new one
102         25-09-2019  Two
103         25-09-2019  Three
104         26-09-2019  four

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...