Dùng IF() trong mệnh đề SET của UPDATE để có điều kiện: chỉ gán giá trị mới nếu cột hiện tại là NULL hoặc 0.
Ví dụ minh họa
Tạo bảng điểm có NULL và 0:
CREATE TABLE DemoTable1592 (StudentMarks INT); INSERT INTO DemoTable1592 VALUES (56), (NULL), (98), (0), (75), (NULL);
Cập nhật: NULL hoặc 0 → 33, giữ nguyên giá trị khác:
UPDATE DemoTable1592 SET StudentMarks = IF(StudentMarks IS NULL OR StudentMarks = 0, 33, StudentMarks);
Kết quả
| Trước | Sau |
|---|---|
| 56 | 56 |
| NULL | 33 |
| 98 | 98 |
| 0 | 33 |
| 75 | 75 |
| NULL | 33 |
Rows matched: 6 Changed: 3 Warnings: 0 — 3 hàng thay đổi (2 NULL + 1 zero).
Giải thích
StudentMarks IS NULL: Kiểm tra NULL (không dùng= NULL).StudentMarks = 0: Kiểm tra giá trị 0.OR: Hợp nhất 2 điều kiện.IF(cond, 33, StudentMarks): Nếu cond đúng → 33, sai → giữ nguyên.
Cách viết gọn hơn
-- Sử dụng NULLIF + COALESCE UPDATE DemoTable1592 SET StudentMarks = COALESCE(NULLIF(StudentMarks, 0), 33);
NULLIF(StudentMarks, 0): Trả về NULL nếu StudentMarks = 0.COALESCE(..., 33): Trả về giá trị đầu không NULL (giá trị gốc nếu ≠0, hoặc 33 nếu NULL/0).
Lưu ý: Cách này cũng chuyển NULL thành 33 (giống IF). Nếu muốn phân biệt NULL vs 0, dùng IF/CASE.
Ứng dụng thực tế
- Điền giá trị mặc định cho dữ liệu thiếu/kém chất lượng.
- Migration data: chuẩn hóa giá trị sentinel (0, -1, 9999) thành NULL hoặc giá trị chuẩn.
- Điều kiện business: "Chỉ cập nhật nếu chưa có dữ liệu".