Как реализовать тернарный условный оператор в MySQL

Я хочу реализовать тернарный условный оператор в MySQL. У меня есть таблица, в которой существует один идентификатор поля. Его значение может быть нулевым. Я хочу показать id в тернарном условном формате следующим образом:

select id = id == null ? 0 : id;

Возможно ли это в MySQL?

Ответ 1

Попробуйте следующее:

select if(Id is null, 0, id) as Id;

Ответ 2

Документация является вашим другом; вы должны прочитать его!

В нем говорится:

IFNULL(expr1,expr2)

Если expr1 не NULL, IFNULL() возвращает expr1; иначе он вернется expr2.

И потом много примеров. Это эквивалентно использованию тернарного условного с сравнением с NULL и объектом сравнения в качестве второго операнда; что не использовать символы ? и :, чтобы вы не имели никакого отношения к чему-либо.

Итак, в вашем случае:

SELECT IFNULL(`id`, 0) FROM `table`

Если вы отчаянно пытаетесь предоставить три операнда явно (почему?!), переключитесь на IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`

Ответ 3

Существует два способа реализовать ту же логику, что и тернарный оператор:

  • Используйте функцию IF, например. IF(expression, true result, false result)
  • Используйте выражение CASE, например.

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    

Когда вы проверяете NULL, вы можете использовать функции IFNULL или COALESCE, например.

IFNULL(ID, 0)
COALESCE(ID, 0)