我想选择a2.date是否存在,但是如果NULL要选择a1.date(a2正在左联接)。这:
a2.date
NULL
a1.date
a2
SELECT a2.date OR a1.date ...
简单地返回一个布尔结果(正如人们期望的那样),但是我如何获得非null列的实际值呢?(a2.date是首选,但如果为null,则为a1.date)
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` ...
它需要更多的指导才能正常工作,但是如果需求发生变化,它将更加灵活。