Database
 sql >> Base de données >  >> RDS >> Database

Comment mettre à jour une colonne basée sur un filtre d'une autre colonne

Dans ce didacticiel, nous allons passer en revue les différentes manières de mettre à jour les lignes d'une table à l'aide de SQL, en passant de mises à jour plus générales à des méthodes plus spécifiques.

Mise à jour complète

Si chaque champ doit être mis à jour avec la même valeur, vous pouvez le faire en utilisant un simple UPDATE commande.

UPDATE table
SET col = new_value;

Mise à jour conditionnelle

Pour faire une mise à jour conditionnelle selon que la valeur actuelle d'une colonne correspond à la condition, vous pouvez ajouter un WHERE clause qui le précise. La base de données trouvera d'abord les lignes qui correspondent à WHERE clause, puis n'effectuez des mises à jour que sur ces lignes.

UPDATE table
SET col = new_value
WHERE col = old_value;

Pour développer cela, vous pouvez ajouter n'importe quoi au WHERE clause que vous aimez tant que c'est une expression valide. Ainsi, pour effectuer une mise à jour basée sur la valeur d'une autre colonne de la même table, vous pouvez exécuter ce qui suit :

UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Depuis le WHERE clause peut contenir n'importe quelle expression valide, vous avez également la possibilité de faire des mises à jour lorsque plusieurs colonnes répondent aux critères

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;

Comme vous pouvez le voir, vous pouvez développer le WHERE clause autant que vous le souhaitez afin de filtrer les lignes pour mettre à jour ce dont vous avez besoin.

Maintenant, que se passe-t-il si vous souhaitez mettre à jour les lignes d'une table en fonction de la condition d'une autre table ? Cette question mène à différentes manières de procéder.

Depuis le WHERE clause peut contenir n'importe quelle expression valide, vous pouvez utiliser une sous-requête :

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

Vous pouvez également utiliser une sous-requête dans le SET partie de l'instruction si vous souhaitez définir la colonne sur une valeur dans une autre table

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

Un moyen plus simple consiste peut-être à spécifier plusieurs tables après le UPDATE clause. Seul le SET L'expression effectuera des mises à jour, mais la liste des tables supplémentaires permettra d'inclure les tables.

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

De même pour développer le WHERE clause, le nombre de tables peut être étendu pour inclure toutes les tables dont vous avez besoin si vous avez plusieurs tables qui doivent être jointes.