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

Sådan opdaterer du en kolonne baseret på en anden kolonne i SQL

Nogle gange skal du muligvis opdatere en kolonne i tabellen baseret på værdien af ​​en anden kolonne i tabellen. Sådan opdaterer du en kolonne baseret på en anden kolonne i SQL Server, MySQL, PostgreSQL.


Sådan opdaterer du en kolonne baseret på en anden kolonne i SQL

Her er trinene til at opdatere en kolonne baseret på en anden kolonne i SQL.

Lad os sige, at du har følgende tabel medarbejdere(id, fornavn, efternavn)

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

Der er to måder at opdatere kolonne baseret på værdien af ​​en anden kolonne – ved hjælp af WHERE-sætning og ved hjælp af CASE-sætning.


Opdater kolonne baseret på en anden kolonne ved hjælp af WHERE-sætning

Her er SQL-forespørgslen for at opdatere fornavn kolonne baseret på værdien af ​​id-kolonner ved hjælp af WHERE-sætning.

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

I ovenstående sætning vil UPDATE-sætningen først vælge rækker, der matcher WHERE-sætningen og opdateringsværdien af ​​vores kolonne first_name

Du kan også bruge logiske operatorer som AND/OR i din WHERE-sætning som vist nedenfor.

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

Du kan også bruge en IN-operator i WHERE-sætning som vist nedenfor.

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

Du kan også bruge en anden SELECT-forespørgsel i din WHERE-sætning som vist nedenfor.

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

I dette tilfælde vil alle de rækker, hvis id-værdi matcher en af ​​værdierne returneret af SELECT-forespørgslen, blive opdateret.


Opdater kolonne baseret på en anden kolonne ved hjælp af CASE-sætning

Her er SQL-forespørgslen for at opdatere fornavn kolonne baseret på værdien af ​​id kolonne ved hjælp af CASE-sætning.

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

Vi bruger en CASE-sætning til at angive den nye værdi af fornavn kolonne for hver værdi af id kolonne. Dette er en meget bedre tilgang end at bruge WHERE-sætning, fordi vi med WHERE-sætning kun kan ændre en kolonneværdi til én ny værdi. Med CASE-sætningen kan vi opdatere vores kolonneværdi til forskellige værdier, afhængigt af de individuelle værdier i id-kolonnen.

Læs også:Sådan rettes forkert strengværdi i MySQL


Opdater kolonne baseret på en anden tabel

Du kan også opdatere kolonne i en tabel fra en anden kolonne i en anden tabel. Lad os sige, at du også har en anden tabel emp2(id, first_name, last_name) og du vil opdatere fornavn i medarbejdere tabel til fornavn i emp2 bord. Begge tabeller har også samme id kolonneværdier.

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

Læs også:Top MySQL-blogs til databaseadministratorer

I et sådant tilfælde kan du bruge følgende UPDATE-sætningssyntaks til at opdatere kolonne fra én tabel baseret på værdien af ​​en anden tabel.

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

Her er en SQL-forespørgsel til at opdatere fornavn kolonne i medarbejdere tabel til fornavn kolonne i emp2 tabel.

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 gør det nemt at visualisere data og overvåge dem i dashboards i realtid. Prøv Ubiq gratis.

  1. Oracle svarende til MySQL INSERT IGNORE?

  2. Konverter 'datetime2' til 'date' i SQL Server (T-SQL-eksempler)

  3. Sådan opretter du en tabel fra en anden tabel i SQL

  4. SQL Server-svarende til WM_CONCAT-funktionen