DEw*_*wok 3 sql sql-server join
好的,所以我的查询返回的行数多于重复数据的预期行数.这是我的查询:
SELECT AP.RECEIPTNUMBER
,AP.FOLDERRSN
,ABS(AP.PAYMENTAMOUNT)
,ABS(AP.PAYMENTAMOUNT - AP.AMOUNTAPPLIED)
,TO_CHAR(AP.PAYMENTDATE,'MM/DD/YYYY')
,F.REFERENCEFILE
,F.FOLDERTYPE
,VS.SUBDESC
,P.NAMEFIRST||' '||P.NAMELAST
,P.ORGANIZATIONNAME
,VAF.FEEDESC
,VAF.GLACCOUNTNUMBER
FROM ACCOUNTPAYMENT AP
INNER JOIN FOLDER F ON AP.FOLDERRSN = F.FOLDERRSN
INNER JOIN VALIDSUB VS ON F.SUBCODE = VS.SUBCODE
INNER JOIN FOLDERPEOPLE FP ON FP.FOLDERRSN = F.FOLDERRSN
INNER JOIN PEOPLE P ON FP.PEOPLERSN = P.PEOPLERSN
INNER JOIN ACCOUNTBILLFEE ABF ON F.FOLDERRSN = ABF.FOLDERRSN
INNER JOIN VALIDACCOUNTFEE VAF ON ABF.FEECODE = VAF.FEECODE
WHERE AP.NSFFLAG = 'Y'
AND F.FOLDERTYPE IN ('405B','405O')
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我添加底部的两个内连接.我基本上都试图获得所有支付NSF的款项.当我运行简单查询时:
SELECT *
FROM ACCOUNTPAYMENT
WHERE NSFFLAG = 'Y'
Run Code Online (Sandbox Code Playgroud)
我只获得了与405B和405O文件夹相关的3行.所以我只期望在上面的查询中返回3行,但我得到9行,在某些列中重复信息.我需要根据有效帐户费用和帐户帐单费用表中的费用代码确切的feedesc和gl帐号.
我无法发布我的输出图片.
注意:当我运行没有两个底部连接的查询时,我得到了预期的输出.
有人可以帮我提高查询效率吗?谢谢!
根据要求,以下是我的查询返回vaf.feedesc和vaf.glaccountnumber列的结果:
Boiler Operator License Fee 2423809
Boiler Certificate of Operation without Manway - Revolving 2423813
Installers (Boiler License)/API Exam 2423807
Boiler Public Inspection/Certification (State or Insurance) 2423816
Boiler Certificate of Operation with Manway 2423801
Boiler Certificate of Operation without Manway 2423801
Boiler Certificate of Operation with Manway - Revolving 2423813
BPV Owner/User Program Fee 2423801
Installers (Boiler License)/API Exam Renewal 2423807
Run Code Online (Sandbox Code Playgroud)
Seb*_*anH 10
原因是连接的至少一个ACCOUNTBILLFEE-FOLDER或VALIDACCOUNTFEE-ACCOUNTBILLFEE不是一对一的.它允许一个文件夹中有许多AccountBillFees或一个ValidAccountFee有许多AccountBillFees.
为了找到这个问题的原因,这就是我通常做的事情:
SELECT A, B, C将查询的部分更改为SELECT *.WHERE ...).这是没有最后两个连接的单行和添加这两个连接后的几行.SELECT *语句,该语句仅包含连接在一起的两个表,这两个表导致多行与WHERE ...上面使用的相同.