SQL附加具有完全相同列但不同ID的表

时间:2014-01-15 21:18:00

标签: sql sqlite

让我们说我有数千个表,每个表有1050列,所有表都在一个数据库中。是否有SQL命令将一个DB中的所有表追加到一个文件中,并删除原始表(在追加之前)。

即,

myDB包含table1,table2,table3所有不同的行数,但相同的列名,相同的列类型以及ID列中的不同唯一ID。

table1
myids,v1,v2,v3
id1,20.3,1.2,3.4
id10,2.1,5.2,9.3
id21,20.5,1.2,8.4
table2
myids,v1,v2,v3
id2,20.3,1.2,3.4
id92,2.1,5.2,9.3
table3
myids,v1,v2,v3
id3,1.3,2.2,5.4
id30,9.1,4.4,9.3

真实的例子几乎相同,但有更多列和更多行。

现在我希望我的数据库中的新表(也是唯一索引):

mysupertable
myids,v1,v2,v3
id1,20.3,1.2,3.4
id10,2.1,5.2,9.3
id21,20.5,1.2,8.4
id2,20.3,1.2,3.4
id92,2.1,5.2,9.3
id3,1.3,2.2,5.4
id30,9.1,4.4,9.3

我希望从数据库中删除table1,table2,table3。

供参考,我使用的是SQLite3。

2 个答案:

答案 0 :(得分:1)

insert into mysupertable (myids,v1,v2,v3)
select myids,v1,v2,v3 
from table1

一遍又一遍......

OR

insert into mysupertable (myids,v1,v2,v3)
select myids,v1,v2,v3 
from table1
union
select myids,v1,v2,v3 
from table2

答案 1 :(得分:1)

CREATE TABLE mysupertable AS
SELECT * FROM table1
UNION 
SELECT * FROM table2
UNION
SELECT * FROM table3;

DROP TABLE table1;
DROP TABLE table2;
DROP TABLE table3;

然而,对于成千上万的表,做联合将是昂贵的。最好使用一系列INSERT:

CREATE TABLE mysupertable AS
SELECT * FROM table1;
DROP TABLE table1;

INSERT INTO mysupertable
SELECT * FROM table2;
DROP TABLE table2;

INSERT INTO mysupertable
SELECT * FROM table3;
DROP TABLE table3;
...