Подтвердить что ты не робот

Sqlite копировать данные из одной таблицы в другую

SQLITE

У меня есть 2 таблицы "Source" и "Destination", которые имеют одинаковые поля. ID и COUNTRY, хотя они оба имеют другие поля, которые не являются общими.

Мне нужно скопировать значение Source.Country в Destination.Country, где соединение находится в ID

Для жизни меня я не могу заставить Sqlite сделать это.

В SQL Server и т.д. это очень простая задача.

Идеи?

4b9b3361

Ответ 2

Если у вас есть данные, уже присутствующие в обеих таблицах, и вы хотите обновить значения столбца таблицы на основе некоторого условия, используйте этот

UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)

Ответ 3

Если вы копируете такие данные, это, вероятно, означает, что ваш datamodel не полностью нормализован, не так ли? Можно ли составить один список стран и сделать ДОПОЛНЕНИЕ больше?

Вместо JOIN вы также можете использовать виртуальные таблицы, поэтому вам не нужно менять запросы в вашей системе.

Ответ 4

Я боролся с этим, и я знаю, что есть другие варианты, но я пришел к выводу, что самый безопасный шаблон:

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 равно null. Так, например:

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;