使用过程中,很意外的发现了这个问题,可否围观解释一下?
SELECT A.D.BILLDATE, A.GUID, A.SUBESSENTIALAPPLYGUID, A.MATERIELCODE, B.LB, B.PM, B.GG,
B.CD, B.PDW, B.PFJ, B.LSJ, B.JJ, A.SUBMITREASON,
(CASE
WHEN NVL(A.REPLYSTATUS, '0') = '1' THEN
'通过'
WHEN NVL(A.REPLYSTATUS, '0') = '-1' THEN
'驳回'
ELSE
'未批复'
END) REPLYSTATUS, A.REPLYRESULT, A.LASTMONTHSALES, A.ISAUDITING, A.AUDITINGGUID,
C.NAME AUDITINGNAME,
(CASE
WHEN D.BILLTYPE = '1' THEN
'申请新增'
ELSE
'撤销'
END) AS BILLTYPE, D.BRANCHGUID, E.NAME, E.SUMMARY, D.AUDITINGDATE, F.NAME SXNAME,
B.MDXL, B.MDKCSL, B.MDDXGS, /*B.YHMDSL, EE.MDKC,*/
(CASE
WHEN NVL(B.MDDXGS, 0) = 0 THEN
0
ELSE
ROUND(NVL(B.MDXL, 0) / NVL(B.MDDXGS, 0), 1)
END) DJXL
FROM SUBESSENTIALAPPLYDETAIL A
LEFT JOIN YW_KCK B
ON A.MATERIELCODE = B.HH
LEFT JOIN (SELECT CODE, NAME FROM DATAITEM WHERE DATAITEMTYPEGUID = '1') F
ON B.SX = F.CODE
LEFT JOIN OPERATORS C
ON A.AUDITINGGUID = C.GUID
JOIN SUBESSENTIALAPPLY D
ON A.SUBESSENTIALAPPLYGUID = D.GUID
LEFT JOIN ORGANIZATION E
ON D.BRANCHGUID = E.CODE
LEFT JOIN ORGANIZATIONMATERIELINFO EE
ON A.MATERIELCODE = EE.MATERIELCODE
AND EE.BRANCHGUID = D.BRANCHGUID
WHERE D.ISSUBMIT = 1
AND (A.D.BILLDATE BETWEEN TO_DATE('2021-08-01', 'yyyy-MM-dd') AND
TO_DATE('2021-08-04', 'yyyy-MM-dd'))
ORDER BY A.MATERIELCODE
以上的代码中的where条件中,出现 A.D.BILLDATE ,如果将D表的left join 改成 join 就会出现报错,A表中不存在这个字段,A表中确实也没有这个字段 ,在软件中发现的,很意外还能运行,不仅是在程序中能运行,还能在oracle中运行,惊奇中……求解释
join相当于inner join,left join是外连接,但后面的on都要求字段存在。所以你还是先确认一下sql语句是否真的在数据库中可以执行(但字段不存在的),以我的经验来看,很可能不是一个数据库。