如果另一列为null,则选择一列

时间:2011-04-18 02:25:16

标签: mysql sql

我想选择a2.date,如果它在那里,但如果是NULL我想选择a1.datea2正在加入)。这样:

SELECT a2.date OR a1.date
       ...

只需返回一个布尔结果(正如人们所期望的那样),我如何得到非空列的实际值呢? (a2.date是首选,但如果它为null,则为a1.date

4 个答案:

答案 0 :(得分:97)

ANSI的意思是使用COALESCE

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

MySQL本机语法为IFNULL

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

与COALESCE不同,IFNULL不能移植到其他数据库。

另一种ANSI语法CASE expression是一个选项:

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

需要更多方向才能正常工作,但如果需求发生变化则更灵活。

答案 1 :(得分:5)

查看COALESCE功能。

采用可变数量的参数并返回第一个非空参数。它适用于连接。

答案 2 :(得分:4)

使用CASE statement进行选择。

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

答案 3 :(得分:3)

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