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

Chỉ cập nhật cột MySQL khi giá trị là NULL hoặc 0 với IF()

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ướcSau
5656
NULL33
9898
033
7575
NULL33

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".