简体   繁体   中英

MySQL: Update table column with id from other table by string compare

I have two tables with a VARCHAR column called "name1" and "name2":

table1:

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

table2:

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

I want to update the column id_table1 of table2 with the respective id from table1 where the rows name1 and name2 match. For example in table2 the first row should be updated with 4 in column id_table1 since 'xchad' = 'xchad' .

A join simply takes too much time with the string compare.

Thank you!

Consider:

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

With indexes on table1(name1) and table2(name2) , this should perform efficiently.

An alternative is to use a correlated subquery:

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

Please note that this second solution does require each name in table2 to have a unique match in table1 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM