Tôi nghĩ bạn đã ở đó 99%:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Thêm && A > 1
đến câu lệnh IF thứ hai và điều kiện thứ ba của bạn được thỏa mãn.
Chỉnh sửa:
Theo nhận xét của @ Andre cho câu hỏi và gợi ý rằng IF
lồng nhau khó đọc, bạn cũng có thể thực hiện việc này dưới dạng một số truy vấn không thực hiện bất kỳ công việc nào không cần thiết và có thể đọc được:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Khi A là NULL, nó sẽ không đáp ứng một trong hai điều kiện này và do đó loại bỏ sự cần thiết phải chỉ định rằng A không phải là NULL.
Tiếp theo, không cần điều kiện thứ ba như @Andre đã đề xuất. Nếu A nằm trong khoảng từ 1 đến 20, nó được để nguyên.
Cuối cùng, đặt A thành 0 trong đó A nhỏ hơn hoặc bằng 1 có vẻ không bình thường. Các giá trị của 1 sẽ được thay đổi thành 0. Nếu bạn chỉ định đặt các giá trị nhỏ hơn 1 (bao gồm cả giá trị âm) thành 0, thì bạn nên hoán đổi <
cho <=
.