sql >> Databasteknik >  >> RDS >> Database

Hur man uppdaterar en kolumn baserat på ett filter i en annan kolumn

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.


  1. Få det nya postens primärnyckel-ID från MySQL-infogningsfrågan?

  2. Hur tar jag bort icke-avbrytande blanksteg från en kolumn i SQL-servern?

  3. Kan du lägga till ett if-uttalande i ORDER BY?

  4. Simple Encrypted Arithmetic Library (SEAL) och sigill::Ciphertext-variabeln