Cập nhật có điều kiện với IF() trong MySQL
Hàm IF() trong MySQL cho phép cập nhật giá trị dựa trên điều kiện logic, tương tự cấu trúc if-else trong lập trình.
Cú pháp
IF(dieu_kien, gia_tri_khi_dung, gia_tri_khi_sai)
Ví dụ minh họa
Tạo bảng DemoTable716:
mysql> CREATE TABLE DemoTable716 (
Id VARCHAR(100),
Value1 INT,
Value2 INT,
Value3 INT
);
Query OK, 0 rows affected (0.65 sec)
Chèn dữ liệu:
mysql> INSERT INTO DemoTable716 VALUES('100', 45, 86, 79);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable716 VALUES('101', 67, 67, 99);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable716 VALUES('102', 77, 57, 98);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable716 VALUES('103', 45, 67, 92);
Query OK, 1 row affected (0.16 sec)
Xem dữ liệu:
mysql> SELECT * FROM DemoTable716;
+------+--------+--------+--------+ | Id | Value1 | Value2 | Value3 | +------+--------+--------+--------+ | 100 | 45 | 86 | 79 | | 101 | 67 | 67 | 99 | | 102 | 77 | 57 | 98 | | 103 | 45 | 67 | 92 | +------+--------+--------+--------+ 4 rows in set (0.00 sec)
Cập nhật Value3 cho Id='101': nếu Value1=67 HOẶC Value2=67 thì đặt Value3=67, ngược lại NULL
mysql> UPDATE DemoTable716 SET Value3 = IF(Value1 = 67 OR Value2 = 67, 67, NULL) WHERE Id = '101'; Query OK, 1 row affected (0.14 sec) Rows matched: 1 Changed: 1 Warnings: 0
Kết quả (chỉ hàng Id=101 thay đổi, Value3 từ 99 thành 67):
mysql> SELECT * FROM DemoTable716;
+------+--------+--------+--------+ | Id | Value1 | Value2 | Value3 | +------+--------+--------+--------+ | 100 | 45 | 86 | 79 | | 101 | 67 | 67 | 67 | | 102 | 77 | 57 | 98 | | 103 | 45 | 67 | 92 | +------+--------+--------+--------+ 4 rows in set (0.00 sec)
Mở rộng: Cập nhật nhiều hàng cùng lúc
-- Cập nhật tất cả hàng: nếu Value1=67 HOẶC Value2=67 thì Value3=67, else giữ nguyên UPDATE DemoTable716 SET Value3 = IF(Value1 = 67 OR Value2 = 67, 67, Value3);
Hàm liên quan
- CASE WHEN ... THEN ... ELSE ... END: Linh hoạt hơn cho nhiều điều kiện
- IFNULL(): Xử lý NULL
- NULLIF(): Trả về NULL nếu hai giá trị bằng nhau
Ví dụ CASE WHEN
UPDATE DemoTable716
SET Value3 = CASE
WHEN Value1 = 67 AND Value2 = 67 THEN 100
WHEN Value1 = 67 OR Value2 = 67 THEN 67
ELSE Value3
END;