gpt4 book ai didi

sql - 合并两个都有联结表的 SQLite 数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:22 24 4
gpt4 key购买 nike

我有两个 SQLite 数据库,它们都有联结表来描述一对多关系。现在这两个数据库需要合并成一个具有某种导入/导出机制的数据库,并且仍然保持关系。

我尝试使用 .dump 转储 DB2,然后使用 .read 将其加载回 DB1,但总是收到 PRIMARY KEY must be unique 警告。

是否有处理这种情况的最佳实践?

最好不要使用 attach 以避免额外的复杂性。


DB1

水果

--------------| id | name  |--------------| 1  | Apple || 2  | Lemon || 3  | Kiwi  |--------------

果汁

----------------| id | name    |----------------| 1  | Juice A || 2  | Juice B |----------------

配方(联结表)

----------------------------| id | juice_id | fruit_id |----------------------------| 1  | 1        | 1        || 2  | 1        | 2        || 3  | 2        | 1        || 4  | 2        | 3        |----------------------------

DB2

水果

---------------| id | name   |---------------| 1  | Kiwi   || 2  | Lemon  || 3  | Apple  || 4  | Orange |---------------

果汁

----------------| id | name    |----------------| 1  | Juice C || 2  | Juice D |----------------

配方(联结表)

----------------------------| id | juice_id | fruit_id |----------------------------| 1  | 1        | 1        || 2  | 1        | 3        || 3  | 2        | 2        || 4  | 2        | 4        |----------------------------

最佳答案

如果您不关心重复项,您可以从 DB1 中获取最大 ID,并将其添加到 DB2 中的每个 ID。但是,您说过 name 可以是唯一的,所以让我们正确地做到这一点。

我假设所有 id 列都是 INTEGER PRIMARY KEY,即自动递增。

打开 DB1,并附加 DB2:

ATTACH '...' AS db2;

复制 DB1 中尚不存在的所有水果和果汁(这些获得新 ID):

INSERT INTO Fruit(name)
SELECT name
FROM db2.Fruit
WHERE name NOT IN (SELECT name
FROM Fruit);
INSERT INTO Juice(name)
SELECT name
FROM db2.Juice
WHERE name NOT IN (SELECT name
FROM Juice);

现在复制食谱,同时通过相应的名称查找新的 ID 值:

INSERT INTO Recipe(juice_id, fruit_id)
SELECT (SELECT id
FROM Juice
WHERE name = (SELECT name
FROM db2.Juice
WHERE id = Recipe2.juice_id)),
(SELECT id
FROM Fruit
WHERE name = (SELECT name
FROM db2.Fruit
WHERE id = Recipe2.fruit_id))
FROM db2.Recipe AS Recipe2;

关于sql - 合并两个都有联结表的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com