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;
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;
INSERT INTO destination (updatedate,colum1,column2,column3) SELECT DATETIME('now','localtime'),colum1,column2,column3 FROM source WHERE id=1; DELETE FROM source WHERE id=1;
USE AdventureWorks2012;
GO
CREATE TABLE dbo.EmployeeSales
( BusinessEntityID varchar(11) NOT NULL,
SalesYTD money NOT NULL
);
GO
INSERT INTO dbo.EmployeeSales
SELECT BusinessEntityID, SalesYTD
FROM Sales.SalesPerson;
GO
7条答案
按热度按时间gev0vcfq1#
参见SQL As Understood By SQLite: INSERT以获得正式定义。
csbfibhn2#
如果两个表中都有数据,并且希望根据某些条件更新表列值,则使用此
lndjwyie3#
我一直在纠结这个问题,我知道还有其他选择,但我得出的结论是最安全的模式是:
它是安全的,因为在你修改
destination
之前,你有一个destination
的副本。我怀疑SQLite中没有包含带联接的update语句,因为它们很强大,但有点风险。使用上面的模式,你最终会得到两个
country
字段。你可以通过显式地声明你想要从destination_old
中检索的所有列来避免这种情况,如果source
中的country
字段为null,也许可以使用coalesce
从destination_old
中检索值。例如:qq24tv8q4#
yptwkmov5#
如果你像这样复制数据,那可能意味着你的数据模型没有完全规范化,对吗?有没有可能做一个国家列表,然后再做一个JOIN?
除了JOIN,你还可以使用虚拟表,这样你就不必改变系统中的查询。
c90pui9n6#
如果要将单个记录从一个表复制到另一个表,并在目标表中添加新列,
在目标插入中,指定要从源表更新的列,然后在源表SELECT语句中,指定要复制的相同列,并且在上述情况下,目标表需要复制操作的时间戳,在源表SELECT语句中,表示新列的列将包括DATETIME('now','localtime');
SQLite处理多个语句,因此您可以在COPY操作的末尾追加一个DELETE查询,
nfg76nw07#
将列定义从一个表复制到另一个表不能使用Transact-SQL语句将单个列从一个表复制到另一个现有表。但是,可以在默认文件组中创建一个新表,并使用SELECTINTO将查询的结果行插入其中。有关详细信息,请参阅INTO子句若要在对象资源管理器中将数据从一个表复制到另一个表,请连接到数据库引擎示例。
在“标准”栏上,单击“新建查询”。