MySQL: Uppdatera från annan tabell
Publicerad i MySQL
Så här uppdaterar du en MySQL-tabell med data från en annan tabell, i en enda smidig SQL-fråga.
Om du vill uppdatera en databaskolumn med data från en annan kolumn kan det vara lätt att slå knut på sig själv när man försöker komma på riktigt från vilket håll man ska angripa problemet.
Det enklaste är att bara göra en enkel fråga och sedan iterera de olika svaren och uppdatera där det behövs, men det kräver en del kod och kan inte göras i enbart MySQL eller MariaDB.
Som tur är går det enklare än de flesta tror att göra just det, och jag tänkte visa er hur i den här artikeln.
Praktiskt exempel
Lås oss anta att vi har en tabell med bilar, där vi vill uppdatera varje bil med ett nytt modellnummer, som ligger i en separat tabell.
SQL-frågan för att göra detta är faktiskt bara tre rader lång, och ni ser den här nedanför:
UPDATE cars INNER JOIN models ON models.carId = cars.id SET cars.modelNumber = models.number
Det som sker här ovanför är alltså följande:
- Leta reda på värdet från tabellen models där modellens bil-id är samma som bilens id i cars-tabellen.
- Hämta modellnumret från tabellen models.
- Spara det värdet i kolumnen modelNumber i cars-tabellen.
Smidigare än så blir det inte, och alternativet är att först göra en SQL-fråga där man efterfrågar informationen, loopa igenom svaren och sedan uppdatera varje rad för sig — inte helt optimalt, och inte heller något man lär sig SQL-frågor av.
Det är alltid bra att ha data separerat i olika kolumner, men ibland vill man kunna optimera hämtningen av datat och då inte ta med alla andra kolumner varje gång.
Sammanfattningsvis
Det här tyckte jag dock var ett utmärkt exempel på just hur enkelt det kan vara att uppdatera en tabell med data från en helt annan tabell.
Om en tabell hämtas tusentals gånger om dagen är det slöseri med resurser att behöva hämta flera olika tabeller för att ta reda på en enkel sak som modellnummer.
I det här fallet är det ingen fara — eftersom det bara är en tabell — men om det hade varit 20-30 extra tabeller som behöver hämtas är det smidigare att mellanlagra datat där det är lite mer lättåtkomligt, och ett sätt att lösa det på är SQL-frågan vi kom fram till i den här artikeln.
OBS! Master för datat i SQL-databasen ska alltid vara de olika tabellerna och inte mellanlagringskolumnerna i huvud-tabellen. Det kan därför vara nyttigt att döpa dem till exempelvis tempStorage_modelnumbers eller liknande, så att andra utvecklare förstår att det inte är fråga om huvudkällan av datat.
Detaljer
- Titel: Uppdatera från annan tabell
- Publicerad:
- Skribent: Christian W.
- Kategorier: MySQL