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

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

昌砚
2023-03-14
问题内容

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

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


问题答案:
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



 类似资料:
  • 问题内容: 我有两个桌子, 这是我的第一张桌子, 这是我的第二张桌子 我需要一些如何使用第一个表中的数据更新第二个表中的所有行的信息。 它需要在一个更新查询中完成所有这些操作。 SUBST_ID和SERIAL_ID都匹配,它需要从第一个表中获取created_id并将其插入第二个表中。 因此,第二张表将变为以下内容, 感谢您的帮助和指导。 问题答案:

  • 问题内容: 我有两个表需要相同的值以实现非规范化。 这是查询。 第一张桌子 第二张桌子 如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 无论如何将两个更新合并为一个? 问题答案: 如文档中所述,应该可以进行多表更新。 http://dev.mysql.com/doc/refman/5.5/en/update.html 注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦

  • 问题内容: 我有两个桌子,看起来都像 我需要根据每个表中的检查名称复制from 到的值。 此声明有任何提示吗? 问题答案: 除了此答案外,如果您需要根据tableA.value动态更改tableB.value,则可以执行以下操作:

  • 问题内容: 是否可以在带有子选择的mysql 5.0上运行UPDATE命令。 我要运行的命令是这样的: ISBN13当前存储为字符串。 这应该更新10k +行。 谢谢, 威廉 问题答案: 只需更改一下即可:

  • 问题内容: 有2个表/实体,非常简单的场景。 表 诗人 -列:id,诗人,国家 表格 国家 -栏:编号,国家,计数 基本上, 国家 对 诗人 的映射自然是一对多的。例如,有来自60个国家的1000名诗人。在每个诗人 的诗人 被包含在国家之一的id民族领域分配给一个民族 国家 。 国家 的计数字段包含来自该国家的诗人中的 诗人 人数。 我的问题是如何仅使用一个SQL查询来按国家对 诗人 的人数进行计

  • 问题内容: 我有两个表,具有相同的架构- 我想将test2表中的值插入到test1中,但是如果具有相同主键的行已经存在,请对其进行更新。我知道在mysql中,您可以使用ON DUPLICATE KEY UPDATE做类似的事情- 但是我不知道如何使用另一个表中的SELECT来执行上述查询。我正在寻找的是表格查询- 该查询显然是无效的。如果有人可以从中提出有效的查询,我将不胜感激。 问题答案: 这应