【发布时间】:2019-05-17 06:31:05
【问题描述】:
我有几个结构相当简单的 sqlite 文件(数据库),例如:
| Id | Category | | Id | CatId | Name |
----------------- ---------------------
| 1 | A | | 1 | 2 | A |
----------------- -- relations one to many --> ---------------------
| 2 | B | | 2 | 1 | B |
---------------------
| 3 | 2 | BC |
如您所见,有一张表,其中包含与 name tabe 相关的类别。问题是我有几个 sutrch 文件,我想将它们合并为一个并保持关系。
所以合并第一个表很简单:
ATTACH DATABASE '{databaseFilePath}' AS Db;
BEGIN;
INSERT INTO Category (Category) SELECT Category FROM Db.Category;
COMMIT;
DETACH DATABASE Db;
但这会改变我的 id(它被设置为自动增量,因为在许多 db 文件中可以有相同的 id)。现在我可以对带有名称的第二个表做同样的事情,问题是保持关系,因为主要已经改变了。有什么合理的方法可以做到这一点?
这里是创建表:
CREATE TABLE Category (Id INTEGER PRIMARY KEY NOT NULL UNIQUE,Category STRING);
INSERT INTO Category (Category, Id) VALUES ('B', 2), ('A', 1);
CREATE TABLE Name (Id INTEGER PRIMARY KEY UNIQUE NOT NULL,
CatId INTEGER
REFERENCES Category (Id) ON DELETE CASCADE ON UPDATE CASCADE MATCH SIMPLE, Name STRING);
INSERT INTO Name (Name,CatId,Id)VALUES ('A',1,1),('AB',1,3 ),('B',2,2);
【问题讨论】:
-
请以
create table ...和insert ...的几行形式提供minimal reproducible example。或者使用 SQLite 命令行工具中的.dump来提供定制的玩具数据库。 -
实际上是两个 TTDB...
-
无需使主键唯一;已经是了。
Category.Category不应该是独一无二的吗?如果是这样就很简单了。 -
另外,你想要
TEXT,而不是STRING。 sqlite.org/datatype3.html#type_affinity