2012-04-27 16 views
6

Ho due tabelle: account_company e document_invoice. La tabella account_company ha 2 colonne: company_id e company_name. Tabella document_invoice ha le stesse colonne: company_id e company_name. È successo qualcosa ed eliminare tutti i dati dal nome della società di colonne da document_invoice.Come copiare i dati tra le tabelle PostgreSQL

Come posso scrivere una query SQL per copiare i dati dalla tabella della società di account a document_invoice? Ho usato UPDATE e SET ma non so esattamente come.

UPDATE document_invoice 
    SET company_name = (SELECT company_name FROM account_company) 
WHERE document_id.company_name=document_id.account 

enter image description here

+1

Leggermente OT, considerano * non portare * il nome della società nel piano di lettura della fattura, a meno che non si pensi che il nome della società potrebbe cambiare e si desidera per acquisire il valore del nome della società dal momento della fattura. (Anche in questo caso potresti prendere in considerazione la gestione temporale del problema, ma potrebbe essere esagerato.) L'archiviazione ridondante dei dati rende più costoso l'aggiornamento e introduce il rischio che possano non essere sincronizzati. Questo è ciò per cui i join sono. Non credere che FUD sia costoso. – kgrittn

+1

Sono d'accordo con kgrittn: se hai già il company_id in document_invoice, non c'è bisogno di tenere una copia di company_name in quella tabella. –

risposta

8

Questo dovrebbe funzionare:

UPDATE document_invoice t1 
SET company_name = t2.company_name 
FROM account_company t2 
WHERE t1.company_id = t2.company_id 
+0

Solo risposte valide finora. –

Problemi correlati