Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cập nhật các trường khác nhau dựa trên điều kiện trong MySQL với IF()

Để cập nhật giá trị khác nhau cho một cột tùy thuộc vào điều kiện, MySQL cung cấp hàm IF(condition, value_if_true, value_if_false) hoặc cấu trúc CASE WHEN bên trong mệnh đề SET của câu lệnh UPDATE.

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DemoTable1436 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20)
);

Chèn dữ liệu (có 3 hàng tên 'David'):

mysql> INSERT INTO DemoTable1436 (Name) VALUES ('Chris');
mysql> INSERT INTO DemoTable1436 (Name) VALUES ('David');
mysql> INSERT INTO DemoTable1436 (Name) VALUES ('Bob');
mysql> INSERT INTO DemoTable1436 (Name) VALUES ('David');
mysql> INSERT INTO DemoTable1436 (Name) VALUES ('David');

Dữ liệu:

mysql> SELECT * FROM DemoTable1436;
+----+-------+
| Id | Name  |
+----+-------+
|  1 | Chris |
|  2 | David |
|  3 | Bob   |
|  4 | David |
|  5 | David |
+----+-------+

Cập nhật có điều kiện: Chỉ đổi tên 'David' thành 'Carol Taylor' cho Id=2

mysql> UPDATE DemoTable1436
    SET Name = IF(Name = 'David', 'Carol Taylor', Name)
    WHERE Id = 2;

Kết quả (chỉ hàng Id=2 thay đổi):

mysql> SELECT * FROM DemoTable1436;
+----+--------------+
| Id | Name         |
+----+--------------+
|  1 | Chris        |
|  2 | Carol Taylor |
|  3 | Bob          |
|  4 | David        |
|  5 | David        |
+----+--------------+

Giải thích

  • IF(Name = 'David', 'Carol Taylor', Name): Nếu Name là 'David' thì gán 'Carol Taylor', ngược lại giữ nguyên Name.
  • WHERE Id = 2: Chỉ áp dụng cho hàng Id=2. Nếu bỏ WHERE, tất cả hàng tên David sẽ bị đổi.

Mở rộng: CASE WHEN cho nhiều điều kiện

UPDATE DemoTable1436
SET Name = CASE
    WHEN Name = 'David' THEN 'Carol Taylor'
    WHEN Name = 'Bob' THEN 'Robert'
    WHEN Name = 'Chris' THEN 'Christopher'
    ELSE Name
END
WHERE Id IN (1,2,3,4,5);

So sánh IF() vs CASE WHEN

Đặc điểmIF()CASE WHEN
Số điều kiện1 điều kiện (true/false)Nhiều điều kiện
Độ đọcĐơn giản, ngắnRõ ràng cho logic phức tạp
Chuẩn SQLMySQL extensionChuẩn SQL:2003

Mẹo: Dùng CASE khi có từ 2 nhánh điều kiện trở lên. Dùng IF() cho logic nhị phân đơn giản.