Я боролся с этим, и я знаю, что есть другие варианты, но я пришел к выводу, что самый безопасный шаблон:
create table destination_old as select * from destination;
drop table destination;
create table destination as select
d.*, s.country
from destination_old d left join source s
on d.id=s.id;
Это безопасно, потому что у вас есть копия destination
до того, как вы его изменили.Я подозреваю, что операторы обновления с объединениями не были включены в SQLite, потому что они мощные, но немного рискованные.
Используя приведенный выше шаблон, вы получите два country
поля.Вы можете избежать этого, явно указав все столбцы, которые вы хотите извлечь из destination_old
, и, возможно, используя coalesce
, чтобы получить значения из destination_old
, если поле country
в source
равно нулю.Так, например:
create table destination as select
d.field1, d.field2,...,coalesce(s.country,d.country) country
from destination_old d left join source s
on d.id=s.id;