Database
 sql >> база данни >  >> RDS >> Database

Как да актуализирате колона въз основа на друга колона в SQL

Понякога може да се наложи да актуализирате колона в таблицата въз основа на стойност на друга колона в таблицата. Ето как да актуализирате колона въз основа на друга колона в 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 безплатно.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Работа с SQL бази данни с PyQt:Основите

  2. SQL, уникални и първични ключове

  3. Визуализиране на данни

  4. Толкова прост ли е низовият оператор „+“?

  5. Производителност на sys.partitions