Ответ 1
Исходная таблица - таблица1, а таблица резервного копирования - таблица2
UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ...
У меня есть таблица, которая может вызвать ее table1, и данные в двух столбцах были уничтожены.
К счастью, у меня есть старая резервная копия таблицы.
В старой резервной копии значения для двух столбцов, о которых идет речь, верны, но остальные столбцы устарели, поэтому я не могу просто импортировать весь дамп.
Поэтому вместо этого я импортировал его в другую таблицу, которую я вызову table2. Каждая запись имеет идентификатор, который одинаковый в обеих таблицах.
Так что в основном мне нужен запрос, который будет проходить через каждую запись в таблице1 и обновлять столбец 1 и столбец2 с соответствующими значениями из таблицы2.
Исходная таблица - таблица1, а таблица резервного копирования - таблица2
UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ...
Это будет работать во всех вариантах базы данных SQL:
update table1 t set
column1 = (select column1 from old_table where id = t.id),
column2 = (select column2 from old_table where id = t.id);
Нет необходимости в каких-либо специальных/агрегатных функциях, потому что совпадение идентификатора попадет ровно в одну строку.
Я думаю, вы можете попробовать что-то вроде этого:
UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field)
выполняется ниже запроса, но он дает ошибку # 1093
UPDATE `mentor2122017`.`users` SET language_id =
(SELECT GROUP_CONCAT(ul.language_id) FROM `mentor2122017`.`users` u
left join `mentor`.`user_language` ul ON u.id = ul.users_id
where
ul.language_id is not null GROUP by ul.users_id)