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.