PostgreSQL:如何查询单条记录的唯一非空字段值
单条记录唯一非空值的SQL查询方案
场景说明
现有数据表结构及数据如下:
| Id | String | Numeric | Date |
|---|---|---|---|
| 1 | null | 1006 | null |
| 2 | Testing value | null | null |
| 3 | null | null | 1-1-2023 |
其中Id为主键,每条记录仅在String、Numeric、Date三列中的某一列有值,其余均为null。需求是查询指定Id对应的唯一非空字段值。
你之前尝试的SELECT String OR Numeric OR Date ...写法错误,因为OR是逻辑运算符,无法实现合并非空值的需求。
正确解决方案
使用ANSI标准SQL的COALESCE函数,它会返回参数列表中第一个非空的值,完全匹配你的场景:
SELECT COALESCE(String, Numeric, Date) AS non_null_value FROM `Table` t WHERE id = '2';
- 该语句会直接返回指定
Id对应的唯一非空值,通过AS non_null_value可以给结果列设置清晰的别名。 - 兼容性:
COALESCE支持MySQL、PostgreSQL、SQL Server、Oracle等绝大多数主流数据库。 - 若使用不支持
COALESCE的旧版数据库(如Access),可以用嵌套的ISNULL:
SELECT ISNULL(String, ISNULL(Numeric, Date)) AS non_null_value FROM `Table` t WHERE id = '2';
内容的提问来源于stack exchange,提问作者user20824479
相关产品推荐
相关产品推荐

