Como siempre y cuando tenga los índices adecuados en su lugar esto debería funcionar bien:
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
)
ACTUALIZACIÓN en sqlite3 no admite una cláusula FROM, lo que hace de este un poco más de trabajo que en otros RDBMS.
Si el rendimiento no es satisfactorio, otra opción podría ser crear nuevas filas para table_a usando un seleccionar y unir con table_a en una tabla temporal. A continuación, elimine los datos de table_a y vuelva a llenar el temporal.
tuviera que excluir la parte de la TABLE_A ha dejado lado nd del argumento set, para hacer que esto funcione. Con la respuesta anterior, se ve como 'column_a_1 = (SELECT table_b.column_b_1 FROM table_b WHERE table_b.nombre_usuario = table_a.nombre_usuario)' –
Esta respuesta ayuda a comprender con más detalle cómo copiar para la respuesta publicada en http://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql/17267423 # 17267423 – zerocog
¿Cuántas veces se realiza la unión aquí? solo 3 veces, o en su lugar 3 veces por fila en la tabla_a? (mi SQL está oxidado) –