MySQL:通过字符串比较使用其他表中的id更新表列

标签 mysql sql

我有两个表,它们的 VARCHAR 列名为“name1”和“name2”:

表 1:

id   |  name1
1    |  xyz
2    |  foo
3    |  barfoo
4    |  xchad

表 2:

id   |  id_table1  | name2
1    |    NULL     | xchad
2    |    NULL     | foo
3    |    NULL     | hade
4    |    NULL     | bar

我想用 table1 中的相应 id 更新 table2id_table1 列,其中行 name1name2 匹配。 例如,在表 2 中,第一行应该在 id_table1 列中更新为 4,因为 'xchad' = 'xchad'

连接只是在字符串比较上花费了太多时间。

谢谢!

最佳答案

考虑:

UPDATE table1 t1
INNER JOIN table2 t2 ON t2.name2 = t1.name1
SET t2.id_table1 = t1.id

有了 table1(name1)table2(name2) 上的索引,这应该可以高效地执行。

另一种方法是使用相关子查询:

UPDATE table2 t2
SET t2.id_table1 = (
    SELECT t1.name1 FROM table1 t1 WHERE t1.name1 = t2.id_table1
)

请注意,第二种解决方案确实要求 table2 中的每个名称在 table1 中具有唯一匹配项。

关于MySQL:通过字符串比较使用其他表中的id更新表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458645/

相关文章:

mysql - 从两个相似表中获取数据的 SQL 查询

mysql - Laravel 从用户表单输入详细信息获取数据库结果

mysql - SQL ROW_num 函数

php - 基于 int 的自定义字段排序

java - 无法使用 jdbc 将数据插入到 db 中的表中

sql - Postgresql:多列索引与单列索引

mysql - 如果列名包含特定值,如何显示列名?

sql - LTRIM/RTRIM - 但只有第一个/最后一个字符是空格时?

mysql - mysqli 中更新字段的返回值

javascript - 如何使用 Jquery 在前端使用新记录验证现有记录