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

Hvordan indsætter jeg i en tabel fra en anden tabel ved at matche på værdier?

Du kan deltage i yderligere tabeller i en UPDATE erklæring, der giver mulighed for denne foretrukne form:

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

Tre grunde:

  • Det er mere sikkert. Din forespørgsel vil skrive en NULL-værdi i hver række, hvor der ikke findes nogen matchende forfatter. Det ser ikke ud til at have nogen betydning i dit tilfælde, men det kan potentielt føre til datatab i lignende forespørgsler, hvor du allerede har data i kolonnen, der skal opdateres. Mit alternativ gør intet, hvis der ikke findes en matchende forfatter.

  • Det er hurtigere. Ovenstående for en. Men også fordi korrelerede underforespørgsler som om du har en frygtelig skala. Deltagelse i en tabel er generelt hurtigere, især med mere end et par rækker.

  • Det er renere og nemmere at tilpasse til yderligere kolonner.



  1. Dynamisk opdateringserklæring med variable kolonnenavne

  2. Sådan opgraderes MySQL på CentOS

  3. Opret forbindelse til MySQL DB ved hjælp af multi-threading

  4. FIND_IN_SET med to strenge