PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a inserire in una tabella da un'altra tabella confrontando i valori?

Puoi unirti a tabelle aggiuntive in un UPDATE dichiarazione, consentendo questa forma preferibile:

UPDATE books b
SET    author_id = a.author_id
FROM   authors a
WHERE  b.author = a.author_name;

Tre motivi:

  • È più sicuro. La tua query scriverà un valore NULL in ogni riga in cui non viene trovato alcun autore corrispondente. Ciò non ha importanza nel tuo caso, ma può potenzialmente portare alla perdita di dati in query simili in cui hai già dati nella colonna da aggiornare. La mia alternativa non fa nulla se non viene trovato alcun autore corrispondente.

  • È più veloce. Quanto sopra per uno. Ma anche perché sottoquery correlate come se avessi una scala terribilmente. L'unione in una tabella è generalmente più veloce, specialmente con più di poche righe.

  • È più pulito e si adatta più facilmente a colonne aggiuntive.