Если ваша таблица t1 и ее резервная копия t2 имеют много столбцов, вот компактный способ сделать это.
Кроме того, моя связанная с этим проблема заключалась в том, что были изменены только некоторые столбцы, и многие строки не имели правок для этих столбцов, поэтому я хотел оставить их в покое - в основном восстановить подмножество столбцов из резервной копии всей таблицы. Если вы хотите просто восстановить все строки, пропустите предложение where.
Конечно, проще было бы удалить и вставить как select, но в моем случае мне нужно было решение только с обновлениями.
Хитрость в том, что когда вы выбираете * из пары таблиц с повторяющимися именами столбцов, вторая получает имя _1. Итак, вот что я придумал:
update (
select * from t1 join t2 on t2.id = t1.id
where id in (
select id from (
select id, col1, col2, ... from t2
minus select id, col1, col2, ... from t1
)
)
) set col1=col1_1, col2=col2_1, ...