sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur infogar jag i en tabell från en annan tabell genom att matcha på värden?

Du kan gå med i ytterligare tabeller i en UPDATE uttalande, vilket tillåter denna föredragna form:

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

Tre skäl:

  • Det är säkrare. Din fråga kommer att skriva ett NULL-värde i varje rad där ingen matchande författare hittas. Det verkar inte spela någon roll i ditt fall, men kan potentiellt leda till dataförlust i liknande frågor där du redan har data i kolumnen som ska uppdateras. Mitt alternativ gör ingenting om ingen matchande författare hittas.

  • Det är snabbare. Ovanstående för en. Men också för att korrelerade underfrågor som att du har skala fruktansvärt. Att gå med i en tabell är i allmänhet snabbare, särskilt med fler än ett par rader.

  • Det är renare och lättare att anpassa till ytterligare kolumner.



  1. Hur man kör Skapa tabell DDL med UTFÖR Omedelbart i Oracle Database

  2. mysql villkorlig infogning - om inte existerar infoga

  3. mysqldump via SSH till lokal dator

  4. Hur man installerar och säkrar MariaDB på CentOS 8