sqlite将数据从一个表复制到另一个表
SQLITEsqlite将数据从一个表复制到另一个表
我有2个表“Source”和“Destination”具有相同的字段。 ID和COUNTRY,尽管它们都有其他领域也不相同。
我需要的Source.Country值复制到Destination.Country其中加入是ID
对于我的生活,我不能让sqlite的做到这一点。
在SQL Server等这是一个超级简单的任务。
想法?
INSERT INTO Destination SELECT * FROM Source;
赢得;吨工作,因为我需要加入ID字段,只更新一个字段(国家)。 – 2010-11-27 11:17:23
您可以在`SELECT`查询中轻松修改表达式以匹配您的实际表格模式。 – joschi 2010-11-27 12:17:47
如果您正在复制这样的数据,那可能意味着您的数据模型没有完全标准化,对吗?是否可以创建一个国家/地区列表并加入更多联盟?
而不是JOIN你也可以使用虚拟表,所以你不必改变系统中的查询。
如果已经存在两个表中的数据,你要根据一些条件来更新表列的值,然后用这个
UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
我一直在摔跤这个问题,而且我知道有其他的选择,但我得出的结论是最安全的模式是:
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
字段。如果source
中的country
字段为空,则可以通过明确声明要从destination_old
中检索的所有列以及可能使用3210检索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;
更新目的地 SET国家=(选择国家从源其中id = Destination.id) WHERE EXISTS(从源选择1其中id = Destination.id); – 2010-11-27 12:04:45
会有点像这样吗? http://stackoverflow.com/questions/2717590/sqlite-upsert-on-duplicate-key-update – Tom 2010-11-27 11:20:46