sqlite 如何将数据从一个表复制到另一个表(其中两个表都有其他不相同的字段)?

blpfk2vs  于 2023-04-21  发布在  SQLite
关注(0)|答案(7)|浏览(531)

我有两个表SourceDestination,它们具有相同的字段IDCOUNTRY,尽管它们也有其他不相同的字段。
我需要将Source.Country的值复制到Destination.Country中,其中join位于ID上。我不能让SQLite做这个。在SQL Server中,这是一个超级简单的任务。

gev0vcfq

gev0vcfq1#

INSERT INTO Destination SELECT * FROM Source;

参见SQL As Understood By SQLite: INSERT以获得正式定义。

csbfibhn

csbfibhn2#

如果两个表中都有数据,并且希望根据某些条件更新表列值,则使用此

UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
lndjwyie

lndjwyie3#

我一直在纠结这个问题,我知道还有其他选择,但我得出的结论是最安全的模式是:

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之前,你有一个destination的副本。我怀疑SQLite中没有包含带联接的update语句,因为它们很强大,但有点风险。
使用上面的模式,你最终会得到两个country字段。你可以通过显式地声明你想要从destination_old中检索的所有列来避免这种情况,如果source中的country字段为null,也许可以使用coalescedestination_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;
qq24tv8q

qq24tv8q4#

insert into firstTable (column1, column2, ...) select column1, column2,...  from secondTable;
yptwkmov

yptwkmov5#

如果你像这样复制数据,那可能意味着你的数据模型没有完全规范化,对吗?有没有可能做一个国家列表,然后再做一个JOIN?
除了JOIN,你还可以使用虚拟表,这样你就不必改变系统中的查询。

c90pui9n

c90pui9n6#

如果要将单个记录从一个表复制到另一个表,并在目标表中添加新列,

INSERT INTO destination (updatedate,colum1,column2,column3) SELECT DATETIME('now','localtime'),colum1,column2,column3 FROM source WHERE id=1

在目标插入中,指定要从源表更新的列,然后在源表SELECT语句中,指定要复制的相同列,并且在上述情况下,目标表需要复制操作的时间戳,在源表SELECT语句中,表示新列的列将包括DATETIME('now','localtime');
SQLite处理多个语句,因此您可以在COPY操作的末尾追加一个DELETE查询,

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;
nfg76nw0

nfg76nw07#

将列定义从一个表复制到另一个表不能使用Transact-SQL语句将单个列从一个表复制到另一个现有表。但是,可以在默认文件组中创建一个新表,并使用SELECTINTO将查询的结果行插入其中。有关详细信息,请参阅INTO子句若要在对象资源管理器中将数据从一个表复制到另一个表,请连接到数据库引擎示例。
在“标准”栏上,单击“新建查询”。

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

相关问题