关于#oracle#的问题:以上的代码中的where条件中,出现 A.D.BILLDATE ,如果将D表的left join 改成 join 就会出现报错,还能在oracle中运行

使用过程中,很意外的发现了这个问题,可否围观解释一下?

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语句是否真的在数据库中可以执行(但字段不存在的),以我的经验来看,很可能不是一个数据库。