SQL如何实现c为空取b值、c非空取c值的条件查询
SQL实现方案
你可以通过以下两类写法实现需求,均能返回符合规则的结果:
- 通用标准SQL写法(兼容所有支持ANSI SQL的数据库,逻辑直观)
用CASE表达式做条件判断,直接匹配取值规则:SELECT a, CASE WHEN c IS NULL THEN b ELSE c END AS col2 FROM tbl; - 简洁函数写法
用数据库内置的空值处理函数实现,代码更短:- 优先选标准SQL的
COALESCE函数,MySQL、PostgreSQL、SQLite、SQL Server、Oracle 12c+等主流数据库均支持,作用是返回传入参数中第一个非NULL值,完全匹配需求逻辑:SELECT a, COALESCE(c, b) AS col2 FROM tbl; - 部分数据库的专属空值函数也可实现:
- Oracle旧版本可使用
NVL(c, b)替代COALESCE(c, b) - SQL Server可使用
ISNULL(c, b)替代COALESCE(c, b)
- Oracle旧版本可使用
- 优先选标准SQL的
注意:不要搞反
COALESCE/NVL/ISNULL里的参数顺序,必须把允许为NULL的c列放在第一个参数位置,b列放在第二个参数位置,才能得到正确结果。
内容的提问来源于stack exchange,提问作者Gil
相关产品推荐
相关产品推荐

