Database
 sql >> Database >  >> RDS >> Database

Come aggiornare una colonna in base a un filtro di un'altra colonna

In questo tutorial, esamineremo i vari modi per aggiornare le righe in una tabella utilizzando SQL, passando da aggiornamenti più generali a metodi più specifici.

Aggiornamento completo

Se ogni campo deve essere aggiornato allo stesso valore, puoi farlo usando un semplice UPDATE comando.

UPDATE table
SET col = new_value;

Aggiornamento condizionale

Per eseguire un aggiornamento condizionale a seconda che il valore corrente di una colonna corrisponda alla condizione, puoi aggiungere un WHERE clausola che lo specifica. Il database troverà prima le righe che corrispondono a WHERE clausola e quindi eseguire gli aggiornamenti solo su quelle righe.

UPDATE table
SET col = new_value
WHERE col = old_value;

Per espandere questo, puoi aggiungere qualsiasi cosa a WHERE clausola che ti piace purché sia ​​un'espressione valida. Quindi, per eseguire un aggiornamento in base al valore di un'altra colonna nella stessa tabella, potresti eseguire quanto segue:

UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Dal momento che il WHERE la clausola può contenere qualsiasi espressione valida, hai anche la possibilità di eseguire aggiornamenti in cui più colonne soddisfano i criteri

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;

Come puoi vedere, puoi espandere il WHERE clausola quanto vuoi per filtrare le righe per l'aggiornamento a ciò di cui hai bisogno.

Ora cosa succede se vuoi aggiornare le righe in una tabella in base alle condizioni di un'altra tabella? Questa domanda porta a diversi modi in cui potresti farlo.

Dal momento che il WHERE può contenere qualsiasi espressione valida, puoi usare una sottoquery:

UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);

Puoi anche utilizzare una sottoquery nel SET parte dell'istruzione se vuoi impostare la colonna su un valore in un'altra tabella

UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);

Forse un modo più semplice è specificare più tabelle dopo UPDATE clausola. Solo il SET expression eseguirà gli aggiornamenti ma l'elenco di tabelle aggiuntive consentirà l'inclusione delle tabelle.

UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;

Analogamente all'espansione di WHERE clausola, la quantità di tabelle può essere espansa per includere tutte le tabelle di cui hai bisogno se hai più tabelle a cui unire.