У меня есть две таблицы со столбцом VARCHAR
с 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
Я хочу, чтобы обновить столбец id_table1
из table2
с соответствующим идентификатором из table1
, где строки name1
и name2
матча. Например, в таблице 2 первая строка должна быть обновлена на 4
в столбце id_table1
поскольку '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
.