PostgreSQL 12关联查询如何保留未接种患者并显示空疫苗名称
PostgreSQL 关联查询保留无匹配左表行实现方案
核心思路
你当前使用的INNER JOIN只会返回两表关联条件匹配的行,要保留所有患者记录,需替换为左外连接(LEFT JOIN),再通过空值处理函数将未匹配到的疫苗名称转为空字符串即可。
最终查询语句
SELECT p.id, p.name, COALESCE(v.name, '') AS vaccine_id FROM patient p LEFT JOIN vaccine v ON p.vaccine_id = v.id
逻辑说明
LEFT JOIN:保留左表(patient)的全部数据,右表(vaccine)无匹配记录时,右表所有字段返回NULLCOALESCE(v.name, ''):判断疫苗名称字段如果为NULL,则返回空字符串,符合你要求的显示效果- 手动指定查询字段替代
SELECT *,避免两表同名字段冲突,也更符合生产环境查询规范
执行效果
用你提供的示例数据执行上述语句,返回结果和你期望的完全一致:已接种患者正常显示对应疫苗名称,未接种的jessica对应疫苗字段显示为空字符串。
内容的提问来源于stack exchange,提问作者Hey StackExchange
相关产品推荐
相关产品推荐

