Пока у вас есть подходящие индексы, это должно работать нормально:
UPDATE table_a
SET
column_a_1 = (SELECT table_b.column_b_1
FROM table_b
WHERE table_b.user_name = table_a.user_name )
, column_a_2 = (SELECT table_b.column_b_2
FROM table_b
WHERE table_b.user_name = table_a.user_name )
WHERE
EXISTS (
SELECT *
FROM table_b
WHERE table_b.user_name = table_a.user_name
)
ОБНОВЛЕНИЕ в sqlite3 не поддерживает предложение FROM, что делает его немного более эффективным, чем в других СУБД.
Если производительность неудовлетворительная, другой вариант может заключаться в создании новых строк для table_a с использованием выбора и объединения с table_a во временную таблицу. Затем удалите данные из table_a и снова заполните из временного.