Jeg tror, du var 99 % der:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Tilføj && A > 1
til den anden IF-sætning, og din tredje betingelse er opfyldt.
Rediger:
Per @Andres kommentar til spørgsmålet og forslaget om, at den indlejrede IF
er svært at læse, kan du også gøre dette som et par forespørgsler, der ikke gør noget unødvendigt arbejde og er læsbare:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Når A er NULL, vil den ikke opfylde nogen af disse betingelser, og dermed eliminerer behovet for at specificere, at A ikke er NULL.
Dernæst er der ikke behov for den tredje betingelse, som @Andre foreslog. Hvis A er mellem 1 og 20, efterlades den som den er.
Endelig virker det usædvanligt at sætte A til 0, hvor A er mindre end eller lig med 1. Værdier af 1 vil blive ændret til 0. Hvis du har til hensigt blot at sætte værdier mindre end 1 (inklusive negative værdier) til 0, så skal du bytte <
for <=
.