You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL三表RIGHT JOIN查询时含NULL的结果行未显示问题求解

问题原因

你的SQL存在两处核心问题:

  1. 查询结果中no_icd字段取的是icd.no_icd,当没有匹配到ICD记录时该字段会返回NULL,不符合预期中要展示DTD表自带no_icd的要求
  2. 升序排序registration.name时,PostgreSQL默认将NULL值排在结果集末尾,如果你只查看了前几行数据会误以为没有返回带NULL的记录,同时用RIGHT JOIN的写法可读性较差,容易搞混关联逻辑

修正后的查询语句

SELECT
    dtd.no_dtd,
    dtd.description,
    dtd.no_icd,
    reg.no_reg,
    reg.name
FROM DTD dtd
LEFT JOIN ICD icd ON dtd.no_icd = icd.no_icd
LEFT JOIN Registrations reg ON icd.no_reg = reg.no_reg
ORDER BY reg.name ASC NULLS LAST;

改动说明

  • 以DTD为主表,两次使用LEFT JOIN关联ICD和Registrations表,天然保留DTD的全部行,匹配不到的字段自动填充NULL,逻辑更直观不易出错
  • 改为取dtd.no_icd,保证即使没有匹配到ICD记录,也能正确返回DTD表中存储的no_icd值
  • 在ORDER BY后添加NULLS LAST明确指定NULL值行排在结果末尾,也可以根据需求换成NULLS FIRST让NULL行排在最前,避免数据库默认排序规则带来的展示异常

内容的提问来源于stack exchange,提问作者user15293852

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 04:24:01