Finché si dispone di indici adatti a posto questo dovrebbe funzionare bene:
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 in sqlite3 non supporta una clausola FROM, che rende questo un po 'di lavoro che in altri RDBMS.
Se le prestazioni non sono soddisfacenti, un'altra opzione potrebbe essere quella di creare nuove righe per table_a utilizzando un select e join con table_a in una tabella temporanea. Quindi elimina i dati da table_a e ripopola dal temporaneo.
fonte
2010-10-02 13:31:09
ho dovuto escludere la parte table_a dalla sinistra ha lato dell'argomento impostato, per farlo funzionare. Usando la risposta sopra, appare come 'column_a_1 = (SELECT table_b.column_b_1 FROM table_b WHERE table_b.user_name = table_a.user_name)' –
Questa risposta aiuta a capire in modo più dettagliato come copiare per la risposta pubblicata su http://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql/17267423 # 17267423 – zerocog
Quante volte il join viene eseguito qui? solo 3 volte, o 3 volte per riga in table_a? (il mio SQL è arrugginito) –