Понякога може да се наложи да актуализирате колона в таблицата въз основа на стойност на друга колона в таблицата. Ето как да актуализирате колона въз основа на друга колона в SQL Server, MySQL, PostgreSQL.
Как да актуализирате колона въз основа на друга колона в SQL
Ето стъпките за актуализиране на колона въз основа на друга колона в SQL.
Да кажем, че имате следната таблица служители(id, first_name, last_name)
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 | +------+------------+-----------+
Има два начина за актуализиране на колона въз основа на стойност на друга колона – с помощта на клауза WHERE и с помощта на оператор CASE.
Актуализиране на колоната въз основа на друга колона с помощта на клауза WHERE
Ето SQL заявката за актуализиране на first_name колона въз основа на стойност на колоните с идентификатор, използвайки клауза WHERE.
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 | +------+------------+-----------+
В горния израз операторът UPDATE първо ще избере редове, които съответстват на клаузата WHERE и стойността за актуализиране на нашата колона first_name
Можете също да използвате логически оператори като AND/OR във вашата клауза WHERE, както е показано по-долу.
mysql> update employees set first_name='Tim' where id=1 or id=3;
Можете също да използвате оператор IN в клауза WHERE, както е показано по-долу.
mysql> update employees set first_name='Tim' where id in (1,3);
Можете също да използвате друга заявка SELECT във вашата клауза WHERE, както е показано по-долу.
mysql> update employees set first_name='Tim' where id in ( select id from emp2 );
В този случай всички тези редове, чиято стойност на идентификатора съвпада с една от стойностите, върнати от заявката SELECT, ще бъдат актуализирани.
Актуализиране на колоната въз основа на друга колона, използвайки израз CASE
Ето SQL заявката за актуализиране на first_name колона въз основа на стойност на id колона, използваща израз CASE.
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 | +------+------------+-----------+
Използваме оператор CASE, за да посочим нова стойност на first_name колона за всяка стойност на id колона. Това е много по-добър подход от използването на клауза WHERE, защото с клауза WHERE можем да променим само стойност на колона на една нова стойност. С израза CASE можем да актуализираме стойността на нашата колона до различни стойности, в зависимост от отделните стойности на колоната id.
Прочетете също:Как да коригирате неправилна стойност на низ в MySQL
Актуализиране на колоната въз основа на друга таблица
Можете също да актуализирате колона в една таблица от друга колона в различна таблица. Да кажем, че имате и друга таблица emp2(id, first_name, last_name) и искате да актуализирате first_name в служители таблица до first_name в emp2 маса. И двете таблици имат един и същ id стойности на колони.
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 | +------+------------+-----------+
Прочетете също:Топ MySQL блогове за администратори на бази данни
В такъв случай можете да използвате следния синтаксис на израза UPDATE, за да актуализирате колона от една таблица въз основа на стойност на друга таблица.
UPDATE first_table, second_table
SET first_table.column1 = second_table.column2
WHERE first_table.id = second_table.table_id;
Ето SQL заявка за актуализиране на first_name колона в служители таблица до first_name колона в emp2 таблица.
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 улеснява визуализирането на данни и наблюдението им в табла за управление в реално време. Опитайте Ubiq безплатно.