Подтвердить что ты не робот

MySQL - использование If Then Else в MySQL UPDATE или SELECT Запросы

Как обновить таблицу и установить разные значения при условии, что значение равно True.

Например:

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

Я видел выражение CASE и выражение IF в процедурах и функциях, но я хочу использовать его в простой инструкции update/select. Возможно ли, или я ожидаю слишком много от этой прекрасной базы данных с открытым исходным кодом?

4b9b3361

Ответ 1

UPDATE table
SET A = IF(A > 0 AND A < 1, 1, IF(A > 1 AND A < 2, 2, A))
WHERE A IS NOT NULL;

вы можете использовать CEIL(), если A всегда является значением с плавающей запятой > 0 и <= 2

Ответ 2

В то время как вы, безусловно, можете использовать MySQL IF() функция потока управления как продемонстрировано ответом dbemerlin, я подозреваю, что это может быть немного яснее для читателя (т.е. себя и любых будущих разработчиков, которые могут забрать ваш код в будущем), чтобы использовать CASE:

UPDATE Table
SET    A = CASE
         WHEN A > 0 AND A < 1 THEN 1
         WHEN A > 1 AND A < 2 THEN 2
         ELSE A
       END
WHERE  A IS NOT NULL

Конечно, в этом конкретном примере немного расточительно установить A для себя в предложении ELSE - лучше всего для фильтрации таких условий из UPDATE, посредством предложения WHERE:

UPDATE Table
SET    A = CASE
         WHEN A > 0 AND A < 1 THEN 1
         WHEN A > 1 AND A < 2 THEN 2
       END
WHERE  (A > 0 AND A < 1) OR (A > 1 AND A < 2)

(Неравенства влекут A IS NOT NULL).

Или, если вы хотите, чтобы интервалы были закрыты, а не открывались (обратите внимание, что это установит значения 0 в 1 -if, что нежелательно, можно явно фильтровать такие случаи в предложении WHERE или добавить условие более высокого приоритета WHEN):

UPDATE Table
SET    A = CASE
         WHEN A BETWEEN 0 AND 1 THEN 1
         WHEN A BETWEEN 1 AND 2 THEN 2
       END
WHERE  A BETWEEN 0 AND 2

Хотя, как отметил дбмерлин, для этой конкретной ситуации вы могли бы вместо этого использовать CEIL():

UPDATE Table SET A = CEIL(A) WHERE A BETWEEN 0 AND 2

Ответ 3

Здесь содержится запрос на обновление таблицы на основе сравнения другой таблицы. Если запись не найдена в таблицеB, она обновит "активное" значение до "n". Если он найдет, будет установлено значение NULL

UPDATE tableA
LEFT JOIN tableB ON tableA.id = tableB.id
SET active = IF(tableB.id IS NULL, 'n', NULL)";

Надеюсь, это поможет кому-то еще.