Khi cần tăng giá cho nhiều sản phẩm với tỷ lệ phần trăm khác nhau, sử dụng CASE WHEN bên trong câu lệnh UPDATE cho phép thực hiện trong một truy vấn duy nhất thay vì chạy nhiều câu lệnh riêng lẻ.
Ví dụ minh họa
Tạo bảng sản phẩm:
CREATE TABLE DemoTable (
ProductName VARCHAR(20),
ProductPrice INT
);
Chèn dữ liệu ban đầu:
INSERT INTO DemoTable VALUES ('Product-1', 700);
INSERT INTO DemoTable VALUES ('Product-2', 1000);
INSERT INTO DemoTable VALUES ('Product-3', 3000);
Cập nhật giá với tỷ lệ khác nhau cho từng sản phẩm:
UPDATE DemoTable
SET ProductPrice = CASE
WHEN ProductName = 'Product-1' THEN ProductPrice + (ProductPrice * 20 / 100) -- +20%
WHEN ProductName = 'Product-2' THEN ProductPrice + (ProductPrice * 40 / 100) -- +40%
WHEN ProductName = 'Product-3' THEN ProductPrice + (ProductPrice * 60 / 100) -- +60%
ELSE ProductPrice -- Giữ nguyên nếu không khớp
END;
Kết quả sau cập nhật
| ProductName | ProductPrice (cũ) | ProductPrice (mới) | Tỷ lệ |
|---|---|---|---|
| Product-1 | 700 | 840 | +20% |
| Product-2 | 1000 | 1400 | +40% |
| Product-3 | 3000 | 4800 | +60% |
Ưu điểm của cách này
- Chỉ cần một truy vấn UPDATE thay vì 3 truy vấn riêng biệt.
- Đảm bảo tính nhất quán (atomic) — tất cả cập nhật thành công hoặc không có cái nào.
- Hiệu năng tốt hơn do giảm round-trip đến server.
- Dễ bảo trì: logic tập trung ở một nơi.
Lưu ý: Luôn có mệnh đề ELSE (hoặc ELSE ProductPrice) để tránh gán NULL cho các hàng không khớp điều kiện.