penso che eri il 99% non vi:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Aggiungere il && A > 1
alla seconda istruzione IF e la vostra terza condizione è soddisfatta.
Edit:
Per @ commento di Andre alla domanda e la suggestione che la nidificato IF
è difficile da leggere, si potrebbe anche fare questo come un paio di query che non fanno alcun lavoro inutile e sono leggibili:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Quando a è NULL, non si incontreranno una di queste condizioni, ed elimina quindi la necessità di specificare che a non essere NULL.
Successivamente, non è necessaria la terza condizione, come suggerito da @Andre. Se A è tra 1 e 20, viene lasciato così com'è.
Infine, l'impostazione da A a 0 dove A è minore o uguale a 1 sembra inusuale. I valori di 1 verranno modificati in 0. Se si intende semplicemente impostare valori inferiori a 1 (inclusi i valori negativi) su 0, è necessario sostituire lo <
per <=
.
Non è necessario il secondo caso. Set A = A non fa nulla. Filtrare questo nella clausola where, dovrebbe essere più veloce: 'WHERE A IS NOT NULL AND (A> 20 OR A <= 1)' – Andre