首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一个MySQL表中的值更新另一个表

问使用一个MySQL表中的值更新另一个表
EN

Stack Overflow用户
提问于 2011-04-20 16:57:14
回答 2查看 127.5K关注 0票数 99

我正在尝试根据来自另一个表的信息来更新一个MySQL表。

我的original表如下所示:

代码语言:javascript
复制
id | value
------------
1  | hello
2  | fortune
3  | my
4  | old
5  | friend

tobeupdated表如下所示:

代码语言:javascript
复制
uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        |    | old
4        |    | friend
5        |    | fortune

我想用基于value (字符串存储在VARCHAR(32)字段中)的original中的id来更新tobeupdated中的id。

希望更新后的表看起来像这样:

代码语言:javascript
复制
uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        | 4  | old
4        | 5  | friend
5        | 2  | fortune

我有一个可以工作的查询,但它非常慢:

代码语言:javascript
复制
UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value

这会耗尽我的CPU,并最终导致超时,只执行一小部分更新(有几千个值需要匹配)。我知道通过value进行匹配会很慢,但这是我必须将它们匹配在一起的唯一数据。

有没有更好的方法来更新这样的值呢?我可以为合并后的结果创建第三个表,这样会更快吗?

我试过MySQL - How can I update a table with values from another table?,但它没有真正的帮助。有什么想法吗?

提前感谢您对MySQL新手的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-20 20:41:14

代码语言:javascript
复制
UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id

这应该可以做到这一点,实际上它所做的就是你所做的。然而,我更喜欢连接的'JOIN‘语法,而不是多个'WHERE’条件,我认为它更容易阅读

至于运行缓慢,表有多大?您应该在tobeupdated.value和original.value上建立索引

编辑:我们还可以简化查询

代码语言:javascript
复制
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id

当连接的两个表具有相同的命名key时,USING是速记形式,例如id。即一个等值加入http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join

票数 223
EN

Stack Overflow用户

发布于 2011-04-20 17:49:01

这取决于这些表的用途,但您可以考虑在插入和更新时将触发器放在原始表上。插入或更新完成后,仅基于原始表中的一项更新第二个表。这样会更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5727827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档