Обновление нескольких столбцов с использованием «SET», когда ни одна из таблиц не имеет первичного ключа - PullRequest
0 голосов
/ 27 сентября 2019

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

Табличка A:

    ResultID     | ImportDate | Comment1
    ----------------------------------------------
    101          | 25-09-2019 | One in Table A
    ----------------------------------------------
    101          | 25-09-2019 | One copy in Table A
    -----------------------------------------------
    102          | 25-09-2019 | Two in Table A
    -----------------------------------------------
    103          | 25-09-2019 | Three in Table A
    -----------------------------------------------

Таблица B:

    ResultID     | ImportDate | Comment2
    ------------------------------------------
    101          | 26-09-2019 | One in Table B
    ------------------------------------------
    101          | 26-09-2019 | One copy in Table B
    ------------------------------------------
    104          | 26-09-2019 | four in Table B
    -------------------------------------------

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

Таблица A:

ResultID     | ImportDate | Comment1
---------------------------------------------
101          | 26-09-2019 | One in Table B
---------------------------------------------
101          | 26-09-2019 | One copy in Table B
--------------------------------------------
102          | 25-09-2019 | Two in Table A
--------------------------------------------
103          | 25-09-2019 | Three in Table A
---------------------------------------------
104          | 26-09-2019 | four in Table B
    -------------------------------------------

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

Примечание: ResultId не является первичным ключом в обеих таблицах.

Что я пробовал в MySQL: Если ResultId является первичным ключом, ниже работает решение, но я хочу найти решение, когда ResultID не является первичным ключом.

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

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

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

1 Ответ

0 голосов
/ 27 сентября 2019

вы можете работать следующим образом.

SELECT CONCAT( "INSERT INTO ..... " )
FROM ....

Анализ вашего пути для создания запросов SQL, если запись не существует из этих таблиц :) Быстро и грязно.

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