我有一个SQLite数据库,其中包含一组表。这些表中的所有数据都可以通过某个id隔离为一组集合。例如:
Table A
ID value1 value2
1 asd fgh
2 sdf ghj
Table B
ID ID2 value4
1 10 vbn
2 11 bnm
Table C
ID2 value5 value6
10 asdfg qwer
11 tyui hjkl
每个ID
列将映射另一个ID
,每个ID2
将映射到另一个ID2
。
我想获取这个数据库,并生成一系列较小的数据库,每个数据库都具有相同的结构,但只包含1 ID
的数据:
Database1.sqlite
Table A
ID value1 value2
1 asd fgh
Table B
ID ID2 value4
1 10 vbn
Table C
ID2 value5 value6
10 asdfg qwer
Database2.sqlite
Table A
ID value1 value2
2 sdf ghj
Table B
ID ID2 value4
2 11 bnm
Table C
ID2 value5 value6
11 tyui hjkl
我可以逐个创建表格,通过一系列ID
语句按SELECT
收集所有数据,然后通过一系列INSERT
语句添加它,但我认为必须有更好的方法。
我的另一个想法是我可以创建一系列视图,每个视图都将数据隔离成上面的格式。从那里,我可以将这些系列视图写成一个sqlite文件作为数据库。
我的问题我的观点生成理念有多现实?是否可以生成一系列模仿每个表结构的视图,但是比如说ID = 1
,然后将这些视图保存为sqlite文件?所有这些都需要在C#中完成。有没有更好的方法来做我想做的事情?
更多信息 这些表可以具有多个具有相同ID的行。每个表还需要一些主键/外键。理想情况下,我们可以使用这些较小的表,然后将它们全部压缩到更大的表中。
答案 0 :(得分:2)
可以合并INSERT
和SELECT
。
与ATTACHed databases一起,这允许每个表使用一个语句进行复制:
ATTACH 'C:\some\where\Database1.sqlite' AS db1;
CREATE TABLE db1.A(ID, value1, value2);
CREATE TABLE db1.B(ID, ID2, value4);
CREATE TABLE db1.C(ID2, value5, value6);
INSERT INTO db1.A SELECT * FROM main.A WHERE ID = 1;
INSERT INTO db1.B SELECT * FROM main.B WHERE ID = 1;
INSERT INTO db1.C SELECT * FROM main.C
WHERE ID2 IN (SELECT ID2 FROM B WHERE ID = 1);
ATTACH 'C:\some\where\Database2.sqlite' AS db2;
CREATE TABLE db2.A(ID, value1, value2);
CREATE TABLE db2.B(ID, ID2, value4);
CREATE TABLE db2.C(ID2, value5, value6);
INSERT INTO db2.A SELECT * FROM main.A WHERE ID = 2;
INSERT INTO db2.B SELECT * FROM main.B WHERE ID = 2;
INSERT INTO db2.C SELECT * FROM main.C
WHERE ID2 IN (SELECT ID2 FROM B WHERE ID = 2);