如果有,我想 Select a2.date,但如果是NULL,我想 Select 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`
   ...

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

Mysql相关问答推荐

mysql查询汇总数据

插入时发生日期时间字段溢出错误

返回包含某一列的分组最大值的行,说明列中的重复值

表列中的SQL SUM MENY值记录单个查询

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

将上传文件的存储路径放在一张表中的缺点是什么?

按相关表中的计数和特定值过滤

如何本地化 MySQL 表中的实体?

Select 最高等级最多的部门名称

MySQL,递归 CTE.它如何以这种句法形式工作?

使用 Having 表达式连接多个表

如何查询由另一个查询创建的表?

仅当其他行相等时才 Select 行值

按年份范围 SQL 查询分组

MySQL:从 n 个关系表中 Select 所有具有 MAX() 值的行

如何知道 Select 查询花费了多少时间?

如何在 MySQL 中删除具有 2 列作为复合主键的多行?

是否可以在内部连接期间重命名连接列?

WHERE 子句中的条件顺序会影响 MySQL 性能吗?

邮箱地址可接受的字段类型和大小?