Как использовать If Then Else в запросе на обновление MySQL? - PullRequest
6 голосов
/ 15 марта 2012

Я хочу обновить таблицу в MySQL следующим образом:

UPDATE Table
SET A = '20' IF A > 20
SET A = A    IF A < 20 
SET A = 0    IF A <= 1
WHERE A IS NOT NULL;

Но приведенный выше SQL не является допустимым синтаксисом.Я также попробовал это:

UPDATE table
SET A = IF(A > 20, 20, IF(A < 20, A, 0));

Но также недопустимый синтаксис.Как использовать оператор if в запросе на обновление, подобном этому?

Ответы [ 2 ]

11 голосов
/ 15 марта 2012

Я думаю, что вы там были на 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, то вы должны поменять < на <=.

5 голосов
/ 15 марта 2012
UPDATE Table
SET A = Case
When A > 20 Then 20 
When A <= 1 Then 0
End
WHERE A IS NOT NULL and ( A > 20 or A <= 1 )

или, проще, 2 утверждения

UPDATE Table
SET A = 20 
where A > 20;

UPDATE Table
SET A = 0
where A <= 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...