creo que usted era 99% no:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Añadir la && A > 1
a la segunda instrucción SI y su tercera condición es satisfecha.
Editar:
por @ comentarios de Andre a la pregunta y la sugerencia de que el anidado IF
es difícil de leer, también se puede hacer esto como un par de consultas que no hace ningún trabajo innecesario y son legibles:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Cuando a es NULL, no cumplirá ninguna de estas condiciones, y por lo tanto elimina la necesidad de especificar que a no ser nulo.
A continuación, no hay necesidad de la tercera condición como @Andre sugirió. Si A está entre 1 y 20, se queda tal como está.
Por último, ajustar A a 0 donde A es menor o igual a 1 parece inusual. Los valores de 1 se cambiarán a 0. Si tiene la intención simplemente de establecer valores inferiores a 1 (incluidos los valores negativos) en 0, debe cambiar <
por <=
.
No necesita el segundo caso. Establecer A = A no hace nada. Filtre esto en la cláusula where, debería ser más rápido: 'DONDE A NO ES NULO Y (A> 20 O A <= 1)' – Andre