开发者社区 问答 正文

用另一个MySQL表更新一个MySQL表?mysql

我正在尝试根据另一个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 我想更新id在tobeupdated与id来自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-如何使用另一个表中的值更新表?,但并没有真正的帮助。有任何想法吗?

在此先感谢您帮助MySQL新手!

展开
收起
保持可爱mmm 2020-05-17 11:15:05 408 分享 版权
1 条回答
写回答
取消 提交回答
  • UPDATE tobeupdated INNER JOIN original ON (tobeupdated.value = original.value) SET tobeupdated.id = original.id 那应该做到,实际上它确实在做您的工作。但是,我更喜欢使用“ JOIN”语法进行连接,而不是使用多个“ WHERE”条件,我认为它更易于阅读

    至于运行缓慢,表有多大?您应该在tobeupdated.value和上都有索引original.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来源:stack overflow

    2020-05-17 11:16:58
    赞同 展开评论