我有两个结构相同且每个大约10k行的表:
db1.people db2.people
*************** ***************
name | number name | number
--------------- ---------------
mike | bob |
john | Kev | 45
mark | mark | 16
*************** ***************
我的目标是在两个表中找到相同的人,并将数字值从db2复制到db1。它花了一些黑客,但我认为我有这个工作:
UPDATE people SET number = (SELECT number FROM db2.people WHERE number > 0 AND name = main.people.name);
这很有效,但非常重。我认为它做了以下事情:
db2中只有大约200个10k行,其中填充了一个数字。
这是我离开联盟的地方;我如何限制上述查询只打扰运行db2.people.number中具有相应数字值的名称?
那应该把我的10k ^ 10k带到200 ^ 10k
谢谢,
答案 0 :(得分:1)
由于SQLite不支持更新连接语法,因此您可能会遇到涉及相关子查询的当前方法。话虽这么说,如果你在其两列的db2.people
表中添加索引,它可能会显着加快更新速度。如果您在name
和number
上添加索引,则可以在更新期间为db1.people
中的每一行提供更快的查找时间。
答案 1 :(得分:1)
我读过SQLITE支持exists子句
UPDATE people
SET number =
(SELECT number FROM db2.people WHERE number > 0 AND name = main.people.name)
where exists
(SELECT number FROM db2.people WHERE number > 0 AND name = main.people.name);