ВЫБЕРИТЕ один столбец, если другой является нулевым - PullRequest
38 голосов
/ 18 апреля 2011

Я хочу выбрать a2.date, если он есть, но если он NULL, я хочу выбрать a1.date (a2 соединяется слева).Это:

SELECT a2.date OR a1.date
       ...

Просто возвращает логический результат (как и следовало ожидать), как же получить фактическое значение ненулевого столбца?(a2.date предпочтительнее, но если оно нулевое, то a1.date)

Ответы [ 4 ]

98 голосов
/ 18 апреля 2011

ANSI означает использование COALESCE :

SELECT COALESCE(a2.date, a1.date) AS `date`
   ...

Собственный синтаксис MySQL: IFNULL :

SELECT IFNULL(a2.date, a1.date) AS `date`
   ...

В отличие от COALESCEIFNULL не переносится на другие базы данных.

Другой вариант синтаксиса ANSI, CASE выражение , является опцией:

SELECT CASE
         WHEN a2.date IS NULL THEN a1.date
         ELSE a2.date
       END AS `date`
   ...

Для правильной работы требуется больше указаний,но более гибок при изменении требований.

5 голосов
/ 18 апреля 2011

Проверьте функцию COALESCE.

Принимает переменное количество аргументов и возвращает первый ненулевой. Отлично работает с соединениями.

5 голосов
/ 18 апреля 2011

Используйте оператор CASE для выбора.

SELECT CASE WHEN a2.date IS NULL THEN a1.date
    ELSE a2.date END AS mydate
3 голосов
/ 18 апреля 2011
SELECT COALESCE(a2.date, a1.date) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...