当前位置: 首页 > 面试题库 >

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

穆俊杰
2023-03-14
问题内容

我有两个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 |
----------------------------

问题答案:

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


 类似资料:
  • 我在这里拥有的是一组三个数组列表。一个包含姓名、姓氏、uid和学位方案的学生数组列表。然后,我还有一个模块列表,每个模块还包含一个学生ID数组列表,用于在该特定模块上注册的学生。 我要做的是将学生的数组列表与用户ID的数组列表链接起来,这样程序就会查看ID,并将它们与包含所有学生详细信息的列表进行比较,然后编写一份包含完整学生详细信息和他们注册的模块的合并报告。 我的数组列表设置得很好,但是我很难

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 知乎远程面试要求编程 尾递归 def _recursion_merge_sort2(l1, l2, tmp): if len(l1) == 0 or len(l2) == 0: tmp.extend(l1) tmp.extend(l2) return tmp else: if l1[0] < l2[0]: tmp.append(l1[0])

  • 问题内容: 我需要将供体表中的数据合并到两个目标表中。结构如下。如果在跟踪表中找不到projid,则需要在组件表中创建新组件,并使用新的ID插入到跟踪表中。此外,对于供体表中不再存在的那些项目,跟踪表的“活动”列应标记为0。我可以在单个merge语句中实现此功能吗? 供体表 跟踪表 成分表 合并后的输出表: 成分表 跟踪表 问题答案: 从理论上讲,应该有一个解决方案可以在单个语句中执行此操作,但是

  • rank ▲ ✰ vote url 65 357 50 683 url 合并两个列表 怎样合并两个列表? 例如: listone = [1,2,3] listtwo = [4,5,6] 我期待: mergedlist == [1, 2, 3, 4, 5, 6] 在Python中非常容易. mergedlist = listone + listtwo