让我们说我有数千个表,每个表有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。
答案 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;
...