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

为何Left Join未返回ParentRoleID为NULL的记录?

问题分析与解决

你的问题出在WHERE子句中的srj.isDeleted=0——左连接后,那些没有父角色的行里,srj相关的所有字段都是NULL,而NULL = 0的判断结果不成立,所以这部分行被WHERE条件过滤掉了,最终只返回了有匹配父角色的40条记录。

要实现返回sr表所有未删除行的需求,只需把srj.isDeleted=0从WHERE子句移到JOIN的ON条件里,这样左连接时只会匹配未被删除的父角色,同时保留主表(sr)的所有行:

select sr.Name, srj.Name as ParentSR 
from Role sr
left join Role srj
on sr.id = srj.ParentRoleId and srj.isDeleted = 0
where sr.isDeleted = 0

逻辑说明

  • 主表sr的过滤条件sr.isDeleted=0留在WHERE子句,确保只返回未被删除的角色
  • 把父角色的未删除条件放到ON子句,左连接时只会关联符合条件的父角色,没有父角色的行依然会被保留,此时ParentSR字段会显示为NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:39