SQLITE
我有2个表“ Source”和“ Destination”具有相同的字段。ID和COUNTRY,尽管它们也都有其他不相同的字段。
我需要将Source.Country值复制到联接在ID上的Destination.Country
对于我一生,我无法让Sqlite做到这一点。
在SQL Server等中,这是一个非常简单的任务。
有想法吗?
SQLITE
我有2个表“ Source”和“ Destination”具有相同的字段。ID和COUNTRY,尽管它们也都有其他不相同的字段。
我需要将Source.Country值复制到联接在ID上的Destination.Country
对于我一生,我无法让Sqlite做到这一点。
在SQL Server等中,这是一个非常简单的任务。
有想法吗?
Answers:
INSERT INTO Destination SELECT * FROM Source;
有关正式定义,请参见SQLite理解的SQL:INSERT。
SELECT
查询中的表达式以匹配您的实际表架构。
SELECT
查询INSERT INTO users2(name, name2) VALUES ((SELECT name FROM users),(SELECT name2 FROM users));
如果两个表中都已经有数据,并且您想根据某种条件更新表的列值,请使用
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
字段。您可以通过明确声明要从中检索的所有列destination_old
,或者如果in中的字段为null 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;
如果您要复制这样的数据,则可能意味着您的数据模型未完全标准化,对吗?是否可以列出一个国家并加入更多国家?
除了使用JOIN之外,您还可以使用虚拟表,这样就不必在系统中更改查询。