使用where筛选丢失整行数据
2026/7/1 15:05:15 网站建设 项目流程

项目场景:

项目场景:示例:器械定期审核,器械故障等情况,不再通过纸质流转,而是电子签核,存入数据库永久保存,通过邮件提醒签核状态。

问题描述

显示签核表单当前的步骤与下一阶段是什么,以及这两个阶段的签核人。使用 where 筛选导致数据不显示。

解决示例

SELECTM.ID,M.FORM_CODE,M.ADD_USERASapplicant,M.APPLY_DEPTASapplicant_dept,M.RESPONSORASresponsor,NVL(R1.ROUTE_NAME,TO_CHAR(M.CURRENT_ROUT))||NVL2(E1.USER_NAME,'('||E1.USER_NAME||')','')ASCURRENT_ROUT,NVL(R2.ROUTE_NAME,TO_CHAR(M.NEXT_ROUT))||NVL2(E2.USER_NAME,'('||E2.USER_NAME||')','')ASNEXT_ROUT,M.ADD_DATEFROMMJOINSONM.FORM_CODE=S.ECR_NOLEFTJOINSIGN_PERSONS E1onM.FORM_CODE=E1.ECR_NOANDM.CURRENT_ROUT=E1.ROUTE_IDANDE1.ACTIVE_FLAG='Y'LEFTJOINSIGN_PERSONS E2onM.FORM_CODE=E2.ECR_NOANDM.NEXT_ROUT=E2.ROUTE_IDANDE2.ACTIVE_FLAG='Y'WHERES.USER_NO=:USER_NOANDM.CURRENT_ROUT=S.ROUTE_IDANDM.CURRENT_ROUTNOTIN(0,-99)ANDS.ACTIVE_FLAG='Y'ORDERBYM.ADD_DATEDESC

原因分析:

把连接条件写成FROM M, E1 WHERE E1.ECR_NO = M.FORM_CODE时,这在 SQL 底层被称为隐式内连接。它等同于JOININNER JOIN
如果主表 M 有一张新表单 A001,但只是创建并未发起签核
内连接在比对E1.ECR_NO = M.FORM_CODE时,发现右表对不上,就会把主表 A001 的整条数据从结果集中抹去。
结果就是:只要该表单没有满足 E1 的签核条件,用户在界面上连这张表单的影子都看不见。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询