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

Jam*_*mes 40 mysql sql

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

SELECT a2.date OR a1.date
       ...
Run Code Online (Sandbox Code Playgroud)

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

OMG*_*ies 104

ANSI的意思是使用COALESCE:

SELECT COALESCE(a2.date, a1.date) AS `date`
   ...
Run Code Online (Sandbox Code Playgroud)

MySQL本机语法是IFNULL:

SELECT IFNULL(a2.date, a1.date) AS `date`
   ...
Run Code Online (Sandbox Code Playgroud)

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

另一种ANSI语法CASE表达式是一个选项:

SELECT CASE
         WHEN a2.date IS NULL THEN a1.date
         ELSE a2.date
       END AS `date`
   ...
Run Code Online (Sandbox Code Playgroud)

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

  • @OMGPonies:不要担心贬低者 - 或者,就目前而言,"仇恨会讨厌." (2认同)

Ras*_*ika 5

使用选择CASE语句

SELECT CASE WHEN a2.date IS NULL THEN a1.date
    ELSE a2.date END AS mydate
Run Code Online (Sandbox Code Playgroud)


dkr*_*etz 5

查看COALESCE功能.

采用可变数量的参数并返回第一个非空参数.它与连接工作正常.