sql >> Databasteknik >  >> RDS >> Database

Hur man uppdaterar en kolumn baserat på en annan kolumn i SQL

Ibland kan du behöva uppdatera en kolumn i tabellen baserat på värdet för en annan kolumn i tabellen. Så här uppdaterar du en kolumn baserat på en annan kolumn i SQL Server, MySQL, PostgreSQL.


Hur man uppdaterar en kolumn baserat på en annan kolumn i SQL

Här är stegen för att uppdatera en kolumn baserat på en annan kolumn i SQL.

Låt oss säga att du har följande tabell anställda(id, förnamn, efternamn)

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

Det finns två sätt att uppdatera kolumn baserat på värdet av en annan kolumn – med hjälp av WHERE-satsen och med CASE-satsen.


Uppdatera kolumn baserat på en annan kolumn med hjälp av WHERE-satsen

Här är SQL-frågan för att uppdatera förnamn kolumn baserad på värdet av id-kolumner med hjälp av WHERE-satsen.

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 ovanstående uttalande kommer UPDATE-satsen först att välja rader som matchar WHERE-satsen och uppdateringsvärdet i vår kolumn first_name

Du kan också använda logiska operatorer som AND/OR i din WHERE-sats som visas nedan.

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

Du kan också använda en IN-operator i WHERE-satsen som visas nedan.

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

Du kan också använda en annan SELECT-fråga i din WHERE-sats som visas nedan.

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

I det här fallet kommer alla de rader vars id-värde matchar ett av värdena som returneras av SELECT-frågan att uppdateras.


Uppdatera kolumn baserat på en annan kolumn med CASE-satsen

Här är SQL-frågan för att uppdatera förnamn kolumn baserad på värdet för id kolumn med CASE-satsen.

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 använder en CASE-sats för att ange nytt värde för förnamn kolumn för varje värde på id kolumn. Detta är ett mycket bättre tillvägagångssätt än att använda WHERE-satsen eftersom vi med WHERE-satsen bara kan ändra ett kolumnvärde till ett nytt värde. Med CASE-satsen kan vi uppdatera vårt kolumnvärde till olika värden, beroende på de individuella värdena för id-kolumnen.

Läs också:Så här åtgärdar du felaktigt strängvärde i MySQL


Uppdatera kolumn baserat på en annan tabell

Du kan också uppdatera kolumn i en tabell från en annan kolumn i en annan tabell. Låt oss säga att du också har en annan tabell emp2(id, first_name, last_name) och du vill uppdatera förnamn i anställda tabell till förnamn i emp2 tabell. Båda tabellerna har också samma id kolumnvärden.

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 också:Topp MySQL-bloggar för databasadministratörer

I ett sådant fall kan du använda följande UPDATE-satssyntax för att uppdatera kolumn från en tabell, baserat på värdet för en annan tabell.

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

Här är en SQL-fråga för att uppdatera förnamn kolumnen i anställda tabell till förnamn kolumn i emp2 bord.

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 enkelt att visualisera data och övervaka dem i realtidsinstrumentpaneler. Prova Ubiq gratis.

  1. Hur man skapar en databas från ett skript i MySQL

  2. Att komma runt MySQL Kan inte öppna tabellfel igen

  3. Låt inte Streams Pool lura dig

  4. använder kommaseparerade värden inuti IN-satsen för NUMMER-kolumnen