Ответ 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
Как обновить таблицу и установить разные значения при условии, что значение равно 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. Возможно ли, или я ожидаю слишком много от этой прекрасной базы данных с открытым исходным кодом?
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
В то время как вы, безусловно, можете использовать 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
Здесь содержится запрос на обновление таблицы на основе сравнения другой таблицы. Если запись не найдена в таблицеB, она обновит "активное" значение до "n". Если он найдет, будет установлено значение NULL
UPDATE tableA
LEFT JOIN tableB ON tableA.id = tableB.id
SET active = IF(tableB.id IS NULL, 'n', NULL)";
Надеюсь, это поможет кому-то еще.