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

Come aggiornare una colonna in base a un'altra colonna in SQL

A volte potrebbe essere necessario aggiornare una colonna nella tabella in base al valore di un'altra colonna nella tabella. Ecco come aggiornare una colonna basata su un'altra colonna in SQL Server, MySQL, PostgreSQL.


Come aggiornare una colonna in base a un'altra colonna in SQL

Di seguito sono riportati i passaggi per aggiornare una colonna in base a un'altra colonna in SQL.

Supponiamo che tu abbia la seguente tabella 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       |
+------+------------+-----------+

Esistono due modi per aggiornare la colonna in base al valore di un'altra colonna:utilizzando la clausola WHERE e l'istruzione CASE.


Aggiorna la colonna in base a un'altra colonna utilizzando la clausola WHERE

Ecco la query SQL per aggiornare first_name colonna basata sul valore delle colonne id utilizzando la clausola 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       |
+------+------------+-----------+

Nell'istruzione precedente, l'istruzione UPDATE selezionerà prima le righe che corrispondono alla clausola WHERE e aggiornerà il valore della nostra colonna first_name

Puoi anche utilizzare operatori logici come AND/OR nella tua clausola WHERE come mostrato di seguito.

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

Puoi anche utilizzare un operatore IN nella clausola WHERE come mostrato di seguito.

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

Puoi anche utilizzare un'altra query SELECT nella tua clausola WHERE come mostrato di seguito.

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

In questo caso, verranno aggiornate tutte quelle righe il cui valore id corrisponde a uno dei valori restituiti dalla query SELECT.


Aggiorna la colonna in base a un'altra colonna utilizzando l'istruzione CASE

Ecco la query SQL per aggiornare first_name colonna basata sul valore di id colonna utilizzando l'istruzione 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       |
+------+------------+-----------+

Usiamo un'istruzione CASE per specificare il nuovo valore di first_name colonna per ogni valore di id colonna. Questo è un approccio molto migliore rispetto all'utilizzo della clausola WHERE perché con la clausola WHERE possiamo cambiare solo il valore di una colonna in un nuovo valore. Con l'istruzione CASE, possiamo aggiornare il valore della nostra colonna su vari valori, a seconda dei singoli valori della colonna id.

Leggi anche:Come correggere il valore di stringa errato in MySQL


Aggiorna colonna in base a un'altra tabella

Puoi anche aggiornare la colonna in una tabella da un'altra colonna in una tabella diversa. Supponiamo che tu abbia anche un'altra tabella emp2(id, first_name, last_name) e vuoi aggiornare first_name nei dipendenti tabella a first_name in emp2 tavolo. Entrambe le tabelle hanno anche lo stesso id valori di colonna.

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      |
+------+------------+-----------+

Leggi anche:I migliori blog MySQL per amministratori di database

In tal caso, puoi utilizzare la seguente sintassi dell'istruzione UPDATE per aggiornare la colonna di una tabella, in base al valore di un'altra tabella.

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

Ecco una query SQL per aggiornare first_name colonna in dipendenti tabella a first_name colonna in emp2 tabella.

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 semplifica la visualizzazione dei dati e il monitoraggio in dashboard in tempo reale. Prova Ubiq gratuitamente.