SQL

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

发布于 2021-03-27 16:53:01

我有两个SQLite数据库,两个数据库都有连接表来描述 一对多
关系。现在,需要使用某种导入/导出机制将这两个数据库合并到一个数据库中,并且仍然保持关系。

我尝试使用来转储 DB2.dump然后使用来将其重新加载到 DB1.read,但始终收到PRIMARY KEY mustbe unique警告。

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

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


DB1

Fruit

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

果汁

----------------
| id | 名称|
----------------
| 1 | JuiceA |
| 2 | JuiceB |
----------------

配方(连接表)

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

DB2

Fruit

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

Juice

----------------
| id | 名称|
----------------
| 1 | JuiceC |
| 2 | JuiceD |
----------------

配方(连接表)

----------------------------
| id | juice_id | fruit_id |
----------------------------
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 2 | 2 |
| 4 | 2 | 4 |
----------------------------
关注者
0
被浏览
81
1 个回答
  • 面试哥
    面试哥 2021-03-27
    为面试而生,有面试问题,就找面试哥。

    如果您不关心重复项,则可以从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;
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看