SQLITE
我有2个表“Source”和“Destination”具有相同的字段。 ID和COUNTRY,虽然它们都有其他不常见的字段。
我需要将Source.Country值复制到目标连接的Destination.Country
对于我的生活,我不能让Sqlite这样做。
在SQL Server等中,这是一个非常简单的任务。
想法?
答案 0 :(得分:127)
INSERT INTO Destination SELECT * FROM Source;
有关正式定义,请参阅SQL As Understood By SQLite: INSERT。
答案 1 :(得分:9)
如果两个表中都已存在数据,并且您希望根据某些条件更新表列值,请使用此
UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
答案 2 :(得分:2)
我一直在努力解决这个问题,我知道还有其他选择,但我得出的结论是最安全的模式:
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
中的值1}}为空。例如:
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;
答案 3 :(得分:1)
如果您正在复制这样的数据,那可能意味着您的数据模型没有完全正常化,对吧?是否可以制作一个国家列表并更多地加入?
您也可以使用虚拟表,而不是JOIN,因此您无需更改系统中的查询。