Я думаю, что вы там были на 99%:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Добавьте && A > 1
ко второму оператору IF, и ваше третье условие выполнено.
Редактировать:
За @ комментарий Андре к вопросу и предположение, что вложенный IF
трудно читать, вы также можете сделать это в виде пары запросов, которые не выполняют никакой ненужной работы и являются читабельными:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Когда A равен NULL, он не будет удовлетворять ни одному из этих условий и, следовательно, устраняет необходимость указывать, что A не будет NULL.
Далее, нет необходимости в третьемусловие, как предложил @Andre.Если A находится между 1 и 20, он остается без изменений.
Наконец, установка A в 0, где A меньше или равна 1, кажется необычной.Значения 1 будут изменены на 0. Если вы намереваетесь просто установить значения меньше 1 (включая отрицательные значения) на 0, то вы должны поменять <
на <=
.