一尘不染

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

sql

我想选择a2.date是否存在,但是如果NULL要选择a1.datea2正在左联接)。这:

SELECT a2.date OR a1.date
       ...

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


阅读 134

收藏
2021-03-17

共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`
   ...

它需要更多的指导才能正常工作,但是如果需求发生变化,它将更加灵活。

2021-03-17