Je pense que vous y étiez à 99 % :
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Ajouter le && A > 1
à la deuxième instruction IF et votre troisième condition est satisfaite.
Modifier :
Par le commentaire de @Andre à la question et la suggestion que le IF
imbriqué est difficile à lire, vous pouvez également le faire en quelques requêtes qui ne font pas de travail inutile et qui sont lisibles :
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Lorsque A est NULL, il ne remplira aucune de ces conditions, et élimine ainsi le besoin de spécifier que A n'est pas NULL.
Ensuite, il n'y a pas besoin de la troisième condition comme @Andre l'a suggéré. Si A est compris entre 1 et 20, il reste tel quel.
Enfin, fixer A à 0 où A est inférieur ou égal à 1 semble inhabituel. Les valeurs de 1 seront remplacées par 0. Si vous avez l'intention de simplement définir les valeurs inférieures à 1 (y compris les valeurs négatives) sur 0, vous devez échanger <
pour <=
.