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.