Когда я копирую строки из одной таблицы в другую, используется удобный синтаксис:
INSERT INTO table1 SELECT * FROM table2 WHERE <table 2 rows have some property>
Но что, если я хочу перезаписать все существующие строки в table1 целыми строками из table2? Поэтому я хочу что-то вроде:
UPDATE table1 SET * FROM table2 WHERE <table 1 and 2 rows match on some key field>
Но из того, что я могу сказать, единственный способ сделать это - перечислить столбцы, которые устанавливаются один за другим (set table1.columnA = table2.columnA, table1.columnB = table2.columnB
и т. Д.). Есть ли способ сказать "сделать это для всех столбцов" при использовании UPDATE, как при использовании INSERT? Если нет, то почему?
(Полагаю, я мог бы удалить все строки из таблицы1 с заданным свойством, а затем использовать синтаксис INSERT INTO table1 SELECT *
для ввода замещающих строк из таблицы 2. Но, похоже, это оставляет кучу нежелательных удаленных строк в базе данных нужно пылесосить в какой-то момент, в отличие от чистого ОБНОВЛЕНИЯ, где нет удаленных записей? Или, может быть, я не понимаю эффективность группы удалений, за которой следует группа вставок?)