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

ВЫБРАТЬ один столбец, если другой

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

SELECT a2.date OR a1.date
       ...

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

4b9b3361

Ответ 1

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

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

Синтаксис MySQL является IFNULL:

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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