我想选择a2.date
,如果它在那里,但如果是NULL
我想选择a1.date
(a2
正在加入)。这样:
SELECT a2.date OR a1.date
...
只需返回一个布尔结果(正如人们所期望的那样),我如何得到非空列的实际值呢? (a2.date
是首选,但如果它为null,则为a1.date
)
答案 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) ...