I den här självstudien går vi över de olika sätten att uppdatera rader i en tabell med SQL och går från mer allmänna uppdateringar till mer specifika metoder.
Fullständig uppdatering
Om varje fält behöver uppdateras till samma värde kan du göra det med en enkel UPDATE
kommando.
UPDATE table
SET col = new_value;
Villkorlig uppdatering
För att göra en villkorlig uppdatering beroende på om det aktuella värdet i en kolumn matchar villkoret, kan du lägga till en WHERE
klausul som specificerar detta. Databasen kommer först att hitta rader som matchar WHERE
och sedan bara utföra uppdateringar på dessa rader.
UPDATE table
SET col = new_value
WHERE col = old_value;
För att utöka detta kan du lägga till vad som helst i WHERE
klausul du gillar så länge det är ett giltigt uttryck. Så för att utföra en uppdatering baserat på värdet av en annan kolumn i samma tabell, kan du utföra följande:
UPDATE table
SET col = new_value
WHERE other_col = some_other_value;
Sedan WHERE
sats kan innehålla vilket giltigt uttryck som helst, du har även möjlighet att göra uppdateringar där flera kolumner uppfyller kriterierna
UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;
UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;
Som du kan se kan du utöka WHERE
klausul så mycket du vill för att filtrera ner raderna för uppdatering till vad du behöver.
Vad händer nu om du vill uppdatera rader i en tabell baserat på tillståndet för en annan tabell? Den här frågan leder till några olika sätt du kan göra detta på.
Sedan WHERE
sats kan innehålla vilket giltigt uttryck som helst, du kan använda en underfråga:
UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);
Du kan också använda en underfråga i SET
del av satsen om du vill ställa in kolumnen till ett värde i en annan tabell
UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
Ett enklare sätt är kanske att ange flera tabeller efter UPDATE
klausul. Endast SET
expression kommer att utföra uppdateringar men listning av ytterligare tabeller gör att tabellerna kan inkluderas.
UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;
På samma sätt som att utöka WHERE
klausul kan antalet tabeller utökas till att inkludera alla tabeller du behöver om du har flera tabeller som måste sammanfogas.