PostgreSQL查询:指定名称不存在时返回NULL而非无结果行
PostgreSQL 查询指定名称并返回不存在的NULL行
问题背景
我有一个PostgreSQL数据表,数据如下:
| Name | Attendance |
|---|---|
| Jackie | 2 |
| Jade | 5 |
| Xi | 10 |
| Chan | 15 |
需要实现:查询指定名称列表时,若某个名称不存在于表中,返回对应的NULL行(而非不显示该行)。例如查询('Jackie', 'Jade', 'Cha', 'Xi'),期望结果:
| Name | Attendance |
|---|---|
| Jackie | 2 |
| Jade | 5 |
| NULL | NULL |
| Xi | 10 |
解决方案
通过构造包含目标名称的临时数据集,与原表做LEFT JOIN即可实现需求,以下提供两种常用写法:
写法1:使用ARRAY和unnest
WITH target_names AS ( SELECT unnest(ARRAY['Jackie', 'Jade', 'Cha', 'Xi']) AS name ) SELECT tn.name, t.attendance FROM target_names tn LEFT JOIN your_table t ON tn.name = t.name;
写法2:使用VALUES子句
SELECT tn.name, t.attendance FROM ( VALUES ('Jackie'), ('Jade'), ('Cha'), ('Xi') ) AS tn(name) LEFT JOIN your_table t ON tn.name = t.name;
说明
- 两种写法都会先生成包含所有指定名称的临时表,再左连接原表。原表中不存在的名称,对应的
attendance字段会返回NULL。 - 请将
your_table替换为你实际的数据表名称。
内容的提问来源于stack exchange,提问作者Jackie Chan
相关产品推荐
相关产品推荐

