MySQL: обновление столбца таблицы идентификатором из другой таблицы путем сравнения строк - PullRequest
1 голос
/ 01 апреля 2019

У меня есть две таблицы со столбцом VARCHAR, которые называются «name1» и «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

Я хочу обновить столбец id_table1 из table2 с соответствующим идентификатором из table1, где строки name1 и name2 совпадают. Например, в таблице 2 первая строка должна быть обновлена ​​на 4 в столбце id_table1, начиная с 'xchad' = 'xchad'.

Объединение просто занимает слишком много времени при сравнении строк.

Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2019

Рассмотрим:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...