обновить (перезаписать) всю запись (все столбцы) в sqlite - PullRequest
0 голосов
/ 10 января 2019

Когда я копирую строки из одной таблицы в другую, используется удобный синтаксис:

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. Но, похоже, это оставляет кучу нежелательных удаленных строк в базе данных нужно пылесосить в какой-то момент, в отличие от чистого ОБНОВЛЕНИЯ, где нет удаленных записей? Или, может быть, я не понимаю эффективность группы удалений, за которой следует группа вставок?)

1 Ответ

0 голосов
/ 10 января 2019

Нет такого синтаксиса для именно того, что вы имеете в виду, и я думаю, вам нужно SET каждый столбец в отдельности. Кроме того, SQLite не поддерживает синтаксис прямого обновления, но мы можем использовать коррелированные подзапросы:

UPDATE table1
SET table1.columnA = (SELECT columnA FROM table2 WHERE table1.col = table2.col),
SET table1.columnB = (SELECT columnB FROM table2 WHERE table1.col = table2.col),
SET table1.columnC = (SELECT columnC FROM table2 WHERE table1.col = table2.col);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...