Как реализовать троичный условный оператор в MySQL - PullRequest
74 голосов
/ 14 декабря 2011

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

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

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

Ответы [ 3 ]

122 голосов
/ 14 декабря 2011

Попробуйте это:

select if(Id is null, 0, id) as Id;
41 голосов
/ 14 декабря 2011

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

Там написано:

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`
19 голосов
/ 14 декабря 2011

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

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

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

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

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