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

Oracle LEFT JOIN正确使用:返回无PI/PD角色的提案数据

解决方法

你的问题出在WHERE子句的过滤逻辑上:当某个提案在EPS_PROP_PERSON表中有其他角色(非PI/PD)的记录时,pers.PROP_PERSON_ROLE_ID既不是NULL也不是'PI'/'PD',会被WHERE条件过滤掉,导致这条提案完全不显示。

要保留所有EPS_PROPOSAL的记录,同时只关联PI/PD角色的人员信息(没有的话显示NULL),需要把角色筛选条件从WHERE移到LEFT JOIN的ON子句中:

SELECT eps.PROPOSAL_NUMBER,
       pers.PROP_PERSON_ROLE_ID,
       pers.FULL_NAME,       
       pers.HOME_UNIT
FROM EPS_PROPOSAL eps
LEFT JOIN EPS_PROP_PERSON pers 
  ON eps.PROPOSAL_NUMBER = pers.PROPOSAL_NUMBER
  AND (pers.PROP_PERSON_ROLE_ID = 'PI' OR pers.PROP_PERSON_ROLE_ID = 'PD');

逻辑说明:

  • 使用LEFT JOIN确保EPS_PROPOSAL的所有记录都会被返回,不管有没有匹配的人员记录
  • 将角色筛选条件放到ON子句里,只会关联符合PI/PD角色的人员行;如果提案没有PI/PD,pers相关列就会显示NULL
  • 去掉原WHERE子句的过滤,避免把有其他角色但无PI/PD的提案排除在外

这样查询结果就会包含全部4504条提案,其中那21条无PI/PD的提案会显示PROPOSAL_NUMBER,其余pers列值为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:00:59