ВЫБРАТЬ один столбец, если другой
Я хочу выбрать a2.date
, если он есть, но если он NULL
, я хочу выбрать a1.date
(a2
будет вставлен слева). Это:
SELECT a2.date OR a1.date
...
Просто возвращает логический результат (как и следовало ожидать), как мне получить фактическое значение столбца, отличного от нуля? (a2.date
является предпочтительным, но если оно равно нулю, то a1.date
)
Ответы
Ответ 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) ...