Объедините два столбца вместе из разных таблиц
-
17-09-2020 - |
Вопрос
Допустим, например:
У меня есть два стола: старые данные и new_data новые данные.
И то , и другое старые данные и new_data новые данные пусть один столбец называется это_is_col.
И то , и другое старые данные и new_data новые данные имеют различные (сотни) строк дат (2010-02-06, 2010-01-09, 2007-06-02 и т.д.).Обе таблицы не обязательно имеют одинаковые даты, но они обе имеют одинаковый формат.
Поля обеих таблиц представляют собой различные целые числа.
Моя задача:
Скопируйте поля из старые данные Для new_data новые данные.
Если дата существует в обеих таблицах, поле в new_data новые данные будет заменен.
Если дата не существует в new_data новые данные, затем будет добавлена правильная строка и поле будет скопировано заново.
Вот как далеко я продвинулся:
Создайте временный столбец:
ALTER TABLE `new_data` ADD `tempColumn` TEXT NULL;
Копирование данных из старые данные:
INSERT INTO `new_data` (`tempColumn`) SELECT `this_is_col` FROM `old_data`;
Объединить временную колонку и new_data новые данные . это_is_col.(Я действительно не разобрался в этом шаге, так как не зашел так далеко).
MERGE? `tempColumn` `this_is_col`;
Удалить временную таблицу
ALTER TABLE `new_data` DROP `tempColumn`;
После выполнения второго действия (переноса данных во временный столбец) Я получаю эту ошибку:
#1062 - Duplicate entry '0000-00-00' for key 1
И теперь я застрял.Будем признательны за любую помощь.Я использую MySQL и phpMyAdmin для тестирования SQL-команд.
Решение
Предполагая, что ваши даты индексируются как уникальные ключи:
INSERT INTO newtable
SELECT *
FROM oldtable
ON DUPLICATE KEY column1=oldcolumn1, ...
Другие советы
ты хочешь ВСТАВИТЬ ...ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА.ваше решение уже удовлетворяет шагам 1 и 3 вашей задачи, ОБНОВЛЕНИЕ ДУБЛИКАТА КЛЮЧА позаботится о шаге 2.
Если вы предпочитаете сначала удалить строку, а не обновлять: ЗАМЕНИТЬ
Это тоже была бы всего одна строчка, так что:ЗАМЕНИТЕ ВЫБОР данных, вам не пришлось бы проделывать странности с добавлением текстового столбца.
Как насчет того, чтобы просто сделать UPDATE
и INSERT
?
UPDATE new_data SET col=col
FROM new_data a join old_data b on a.this_is_col = b.this_is_col
Тогда
INSERT INTO new_data (cols) SELECT cols
FROM old_data WHERE this_is_col NOT IN (SELECT this_is_col FROM new_data)
Если только я не неправильно понял...