gpt4 book ai didi

mysql - 用另一个 MySQL 表的值更新一个 MySQL 表

转载 作者:IT老高 更新时间:2023-10-28 12:51:51 25 4
gpt4 key购买 nike

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

我的original表格如下:

id | value
------------
1 | hello
2 | fortune
3 | my
4 | old
5 | friend

还有 tobeupdated表格如下:

uniqueid | id | value
---------------------
1 | | something
2 | | anything
3 | | old
4 | | friend
5 | | fortune

我要更新 idtobeupdatedid来自 original基于 value (存储在 VARCHAR(32) 字段中的字符串)。

希望更新后的表格如下所示:

uniqueid | id | value
---------------------
1 | | something
2 | | anything
3 | 4 | old
4 | 5 | friend
5 | 2 | fortune

我有一个有效的查询,但速度很慢:

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 新手!

最佳答案

UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id

应该这样做,而且它确实在做你的事情。但是,我更喜欢连接的“JOIN”语法而不是多个“WHERE”条件,我认为它更容易阅读

至于运行缓慢,表有多大?您应该在 tobeupdated.valueoriginal.value

上有索引

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

UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id

USING 是当连接的两个表具有相同名称的 key(例如 id)时的简写。即等值连接 - http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join

关于mysql - 用另一个 MySQL 表的值更新一个 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727827/

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