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.