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

Comment mettre à jour une colonne basée sur une autre colonne dans SQL

Parfois, vous devrez peut-être mettre à jour une colonne de la table en fonction de la valeur d'une autre colonne de la table. Voici comment mettre à jour une colonne basée sur une autre colonne dans SQL Server, MySQL, PostgreSQL.


Comment mettre à jour une colonne basée sur une autre colonne en SQL

Voici les étapes pour mettre à jour une colonne basée sur une autre colonne dans SQL.

Disons que vous avez la table suivante employees(id, first_name, last_name)

mysql> create table employees(id int, 
      first_name varchar(255),
      last_name varchar(255));

mysql> insert into employees(id, first_name, last_name)
       values(1,'John','Doe'),
       (2,'Jane','Doe');

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | John       | Doe       |
|    2 | Jane       | Doe       |
+------+------------+-----------+

Il existe deux façons de mettre à jour une colonne en fonction de la valeur d'une autre colonne - en utilisant la clause WHERE et en utilisant l'instruction CASE.


Mettre à jour la colonne en fonction d'une autre colonne à l'aide de la clause WHERE

Voici la requête SQL pour mettre à jour first_name colonne basée sur la valeur des colonnes id à l'aide de la clause WHERE.

mysql> update employees
       set first_name='Tim'
       where id=1;
mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Tim        | Doe       |
|    2 | Jane       | Doe       |
+------+------------+-----------+

Dans l'instruction ci-dessus, l'instruction UPDATE sélectionnera d'abord les lignes qui correspondent à la clause WHERE et mettra à jour la valeur de notre colonne first_name

Vous pouvez également utiliser des opérateurs logiques tels que AND/OR dans votre clause WHERE, comme indiqué ci-dessous.

mysql> update employees
       set first_name='Tim'
       where id=1 or id=3;

Vous pouvez également utiliser un opérateur IN dans la clause WHERE comme indiqué ci-dessous.

mysql> update employees
       set first_name='Tim'
       where id in (1,3);

Vous pouvez également utiliser une autre requête SELECT dans votre clause WHERE, comme indiqué ci-dessous.

mysql> update employees
       set first_name='Tim'
       where id in ( select id from emp2 );

Dans ce cas, toutes les lignes dont la valeur id correspond à l'une des valeurs renvoyées par la requête SELECT seront mises à jour.


Mettre à jour la colonne en fonction d'une autre colonne à l'aide de l'instruction CASE

Voici la requête SQL pour mettre à jour first_name colonne basée sur la valeur de id colonne à l'aide de l'instruction CASE.

mysql> update employees
     set first_name = (CASE
                           WHEN id = 1
                             THEN 'Tim'
                           WHEN id = 2
                             THEN 'Dave'
                           END);

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Tim        | Doe       |
|    2 | Dave       | Doe       |
+------+------------+-----------+

Nous utilisons une instruction CASE pour spécifier la nouvelle valeur de first_name colonne pour chaque valeur de id colonne. C'est une bien meilleure approche que d'utiliser la clause WHERE car avec la clause WHERE, nous ne pouvons changer une valeur de colonne qu'en une seule nouvelle valeur. Avec l'instruction CASE, nous pouvons mettre à jour notre valeur de colonne à différentes valeurs, en fonction des valeurs individuelles de la colonne id.

A lire également :Comment réparer une valeur de chaîne incorrecte dans MySQL


Mettre à jour la colonne en fonction d'une autre table

Vous pouvez également mettre à jour une colonne dans une table à partir d'une autre colonne dans une autre table. Disons que vous avez aussi une autre table emp2(id, first_name, last_name) et vous souhaitez mettre à jour first_name en employés table à first_name dans emp2 table. Les deux tables ont également le même id valeurs de colonne.

mysql> create table emp2(id int,
       first_name varchar(255),
       last_name varchar(255));

mysql> insert into emp2(id, first_name, last_name)
            values(1,'Don','Stone'),
            (2,'Jim','Stew');

mysql> select * from emp2;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Don        | Stone     |
|    2 | Jim        | Stew      |
+------+------------+-----------+

A lire également :Top des blogs MySQL pour les administrateurs de bases de données

Dans ce cas, vous pouvez utiliser la syntaxe d'instruction UPDATE suivante pour mettre à jour la colonne d'une table, en fonction de la valeur d'une autre table.

UPDATE first_table, second_table 
SET first_table.column1 = second_table.column2 
WHERE first_table.id = second_table.table_id;

Voici une requête SQL pour mettre à jour first_name colonne dans employés table à first_name colonne dans emp2 tableau.

mysql> UPDATE employees, emp2
SET employees.first_name = emp2.first_name
WHERE employees.id = emp2.id;

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Don        | Doe       |
|    2 | Jim        | Doe       |
+------+------------+-----------+

Ubiq facilite la visualisation des données et leur suivi dans des tableaux de bord en temps réel. Essayez Ubiq gratuitement.