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_tableSET first_table.column1 = second_table.column2WHERE 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.