Đôi khi bạn có thể cần cập nhật một cột trong bảng dựa trên giá trị của một cột khác trong bảng. Đây là cách cập nhật một cột dựa trên một cột khác trong SQL Server, MySQL, PostgreSQL.
Cách cập nhật một cột dựa trên một cột khác trong SQL
Dưới đây là các bước để cập nhật một cột dựa trên một cột khác trong SQL.
Giả sử bạn có bảng sau nhân viên (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 | +------+------------+-----------+
Có hai cách để cập nhật cột dựa trên giá trị của một cột khác - sử dụng mệnh đề WHERE và sử dụng câu lệnh CASE.
Cập nhật cột dựa trên một cột khác bằng mệnh đề WHERE
Đây là truy vấn SQL để cập nhật first_name dựa trên giá trị của các cột id bằng mệnh đề 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 | +------+------------+-----------+
Trong câu lệnh trên, câu lệnh UPDATE trước tiên sẽ chọn các hàng phù hợp với mệnh đề WHERE và cập nhật giá trị của cột first_name của chúng tôi
Bạn cũng có thể sử dụng các toán tử logic như VÀ / HOẶC trong mệnh đề WHERE của bạn như được hiển thị bên dưới.
mysql> update employees set first_name='Tim' where id=1 or id=3;
Bạn cũng có thể sử dụng toán tử IN trong mệnh đề WHERE như được hiển thị bên dưới.
mysql> update employees set first_name='Tim' where id in (1,3);
Bạn cũng có thể sử dụng một truy vấn SELECT khác trong mệnh đề WHERE của bạn như được hiển thị bên dưới.
mysql> update employees set first_name='Tim' where id in ( select id from emp2 );
Trong trường hợp này, tất cả các hàng có giá trị id khớp với một trong các giá trị được trả về bởi truy vấn SELECT, sẽ được cập nhật.
Cập nhật cột dựa trên một cột khác bằng cách sử dụng câu lệnh CASE
Đây là truy vấn SQL để cập nhật first_name cột dựa trên giá trị của id sử dụng câu lệnh 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 | +------+------------+-----------+
Chúng tôi sử dụng câu lệnh CASE để chỉ định giá trị mới của first_name cột cho mỗi giá trị của id cột. Đây là một cách tiếp cận tốt hơn nhiều so với việc sử dụng mệnh đề WHERE vì với mệnh đề WHERE chúng ta chỉ có thể thay đổi một giá trị cột thành một giá trị mới. Với câu lệnh CASE, chúng tôi có thể cập nhật giá trị cột của mình thành các giá trị khác nhau, tùy thuộc vào các giá trị riêng lẻ của cột id.
Cũng nên đọc:Cách sửa giá trị chuỗi không chính xác trong MySQL
Cập nhật cột dựa trên một bảng khác
Bạn cũng có thể cập nhật cột trong một bảng từ một cột khác trong một bảng khác. Hãy để chúng tôi nói rằng bạn cũng có một bảng khác emp2 (id, first_name, last_name) và bạn muốn cập nhật first_name trong nhân viên bảng thành first_name trong emp2 bàn. Cả hai bảng cũng có cùng id các giá trị cột.
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 | +------+------------+-----------+
Cũng nên đọc:Blog MySQL hàng đầu dành cho quản trị viên cơ sở dữ liệu
Trong trường hợp như vậy, bạn có thể sử dụng cú pháp câu lệnh CẬP NHẬT sau để cập nhật cột từ một bảng, dựa trên giá trị của bảng khác.
UPDATE first_table, second_table
SET first_table.column1 = second_table.column2
WHERE first_table.id = second_table.table_id;
Đây là truy vấn SQL để cập nhật first_name cột trong nhân viên bảng thành first_name cột trong emp2 bảng.
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 giúp dễ dàng trực quan hóa dữ liệu và theo dõi chúng trong trang tổng quan thời gian thực. Dùng thử Ubiq miễn phí.