UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
1
我一直在努力解决这个问题,我知道还有其他选择,但我得出结论最安全的模式是:
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;
使用上面的模式,您最终得到两个 country 字段 . 您可以通过显式声明要从 destination_old 检索的所有列来避免这种情况,并且如果 source 中的 country 字段为空,则可能使用 coalesce 从 destination_old 检索值 . 例如:
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;
4 回答
如果您正在复制这样的数据,这可能意味着您的数据模型没有完全正常化,对吧?是否可以制作一个国家/地区列表并更多地加入?
您也可以使用虚拟表代替JOIN,这样您就不必更改系统中的查询 .
有关正式定义,请参阅SQL As Understood By SQLite: INSERT .
如果两个表中都已存在数据,并且您希望根据某些条件更新表列值,请使用此值
我一直在努力解决这个问题,我知道还有其他选择,但我得出结论最安全的模式是:
它是安全的,因为在你改变它之前你有
destination
的副本 . 我怀疑带有连接的更新语句不是很强大但有点危险 .使用上面的模式,您最终得到两个
country
字段 . 您可以通过显式声明要从destination_old
检索的所有列来避免这种情况,并且如果source
中的country
字段为空,则可能使用coalesce
从destination_old
检索值 . 例如: