MySQL: Uppdatera från annan tabell

Hem » Utveckling » MySQL: Uppdatera från annan tabell

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:

  1. Leta reda på värdet från tabellen models där modellens bil-id är samma som bilens id i cars-tabellen.
  2. Hämta modellnumret från tabellen models.
  3. 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:
  • Kategorier: MySQL

Populära inlägg

Här hittar du de mest besökta artiklarna den senaste tiden.

Populära tjänster

Webbhotell

Inleed Special

29 kr / mån

  • Utrymme: 10 GB
  • Trafikmängd: 250 GB
  • Gratis SSL-certifikat: Ja
  • Startavgift: 0 kr

Virtuell server

Inleed VPS #1

199 kr / mån

  • Antal CPU-kärnor: 1 st
  • Minne: 8 GB
  • Utrymme: 100 GB
  • Trafikmängd: 3000 GB

Dedikerad server

Inleed Server #1

499 kr / mån

  • Antal CPU-kärnor: 2 st
  • Minne: 8 GB
  • Utrymme: 500 GB
  • Trafikmängd: 3000 GB

Backuphantering

Inleed Backup 100

19 kr / mån

  • Utrymme: 100 GB
  • Trafikmängd: 3000 GB
  • Startavgift: 0 kr

Domänhantering

Inleed DNS

0 kr / mån

  • Antal domännamn: Obegränsat

Co-location

Inleed Rackserver 1U

299 kr / mån

  • Trafikmängd: 3000 GB
  • Anslutning: 1000 Mbit/s
  • Reservström: UPS + Diesel
  • Startavgift: 0 kr

VPN-tjänster

NordVPN

33 kr / mån

  • Anslutningar: 6 st
Bäst webbhotell just nu
VPN-tjänster Pris Anslutningar
OVPN 49 kr 4 st
Inleed VPN 29 kr 2 st
NordVPN 33 kr 6 st
Ivacy VPN 22 kr 10 st

Vill du ha hjälp?

Ibland kan det vara svårt att göra ett val. Har du fortfarande inte hittat den information du söker, eller undrar du över något som saknas på sidan? Hör av dig till oss så hjälper vi dig!

Kontakta oss