如果它存在,我想选择a2.date
,但是如果它是NULL
我想选择a1.date
(a2
正在左连接)。这个:如果另一列为空,则选择一列
SELECT a2.date OR a1.date
...
只是返回一个布尔结果(正如人们所期望的那样),但是如何获得非空列的实际值呢? (a2.date
是优选的,但如果它是空的,则a1.date
)
如果它存在,我想选择a2.date
,但是如果它是NULL
我想选择a1.date
(a2
正在左连接)。这个:如果另一列为空,则选择一列
SELECT a2.date OR a1.date
...
只是返回一个布尔结果(正如人们所期望的那样),但是如何获得非空列的实际值呢? (a2.date
是优选的,但如果它是空的,则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 expression,是一个选项:
SELECT CASE
WHEN a2.date IS NULL THEN a1.date
ELSE a2.date
END AS `date`
...
它需要更多的方向才能正常工作,但如果需求的变化更灵活。
'COALESCE'是等价的'CASE'语句的语法糖所以在这里提到它有点多余。为了使用类比,所有的SQL约束都可以使用'SELECT COUNT(*)'(基数)查询来表示,但是如果我在发布的每个使用“FOREIGN KEY”的回答中指出了这一点,它可能会对所有相关人员变得谨慎。但是对此的一个倒退会有点苛刻。 – onedaywhen 2011-04-19 10:10:00
@OMGPonies:不要担心downvoters--或者更准确地说,“仇敌会讨厌。” – 2017-08-03 19:10:51
使用CASE
statement作为选择。
SELECT CASE WHEN a2.date IS NULL THEN a1.date
ELSE a2.date END AS mydate
查看COALESCE函数。
获取可变数量的参数并返回第一个非空值。它可以与连接一起使用。
SELECT COALESCE(a2.date, a1.date) ...
[Conditional NOT NULL case SQL]可能的重复(http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal 2013-05-03 13:20:19