Myślę, że byłeś tam w 99%:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Dodaj && A > 1
do drugiego wyrażenia IF i trzeci warunek jest spełniony.
Edytuj:
Zgodnie z komentarzem @Andre do pytania i sugestią, że zagnieżdżone IF
jest trudny do odczytania, możesz to zrobić również jako kilka zapytań, które nie wykonują niepotrzebnej pracy i są czytelne:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Kiedy A jest NULL, nie spełnia żadnego z tych warunków, a tym samym eliminuje potrzebę określania, że A nie będzie NULL.
Następnie nie ma potrzeby wypełniania trzeciego warunku, jak sugerował @Andre. Jeśli A wynosi od 1 do 20, pozostaje bez zmian.
Wreszcie ustawienie A na 0, gdzie A jest mniejsze lub równe 1, wydaje się niezwykłe. Wartości 1 zostaną zmienione na 0. Jeśli zamierzasz po prostu ustawić wartości mniejsze niż 1 (w tym wartości ujemne) na 0, powinieneś zamienić <
dla <=
.