Tant que vous avez des index appropriés en place cela devrait fonctionner 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
)
UPDATE sqlite3 ne prend pas en charge une clause FROM, ce qui en fait un peu plus de travail que dans d'autres SGBDR.
Si les performances ne sont pas satisfaisantes, une autre option peut consister à créer de nouvelles lignes pour table_a à l'aide d'un select et à les joindre à table_a dans une table temporaire. Ensuite, supprimez les données de table_a et repeupler à partir du temporaire.
je devais exclure la partie table_a de la gauche ha du côté de l'argument set, pour que cela fonctionne. En utilisant la réponse ci-dessus, cela ressemble à 'column_a_1 = (SELECT table_b.column_b_1 FROM table_b WHERE nom_utilisateur_table_table = table_a.user_name)' –
Cette réponse aide à comprendre plus en détail comment copier pour une réponse postée sur http://stackoverflow.com/questions/17267417/comment-upsert-merge-insert-sur-duplicate-update-in-postgresql/17267423 # 17267423 – zerocog
Combien de fois la jointure est effectuée ici? seulement 3 fois, ou plutôt 3 fois par ligne dans table_a? (mon SQL est rouillé) –