我想加入三张桌子。当我连接两个表时,查询工作正常
TBLBPVMASTER
和TBLBPVDETAILS
基于bpvid
,但当我将TableCheque
列表与这两个表合并时,我得到的结果却不符合要求。
例如TBLBPVMaster
包含针对BPVID
的一条记录,TBLBPVDETAILS
包含针对BPVID
的两条记录,而chequelist
包含针对BPVCODE
的两条记录。现在我想组合这三个表,以便生成的查询应该生成两行。以下查询生成4行:
SELECT TBLBPVMaster.*,TBLBPVDetails.*,TBLChequeList.*
FROM TBLBPVDetails
INNER JOIN TBLBPVMaster
ON TBLBPVDetails.BPVId = TBLBPVMaster.BPVId
INNER JOIN TBLChequeList
ON TBLBPVMaster.BPVCode = TBLChequeList.BankVoucherCode
WHERE TBLBPVMaster.BPVId=57
输出:
BPVId DateOfPayment SubSubsidaryAccountId Description BPVCode TotalAmount BPVId SubSubsidaryAccountId Amount Description BankVoucherCode ChequeNo ChequeDate PaidTo ChequeAmount
57 2015-03-12 1-101-1001-10001 KJSKLDJDSKL BPV-57 2000 57 1-101-1002-10002 1000 lskdsj BPV-57 1887 2015-03-10 kdfjhdfj 19889
57 2015-03-12 1-101-1001-10001 KJSKLDJDSKL BPV-57 2000 57 1-101-1001-10004 1000 dlksjkl BPV-57 1887 2015-03-10 kdfjhdfj 19889
57 2015-03-12 1-101-1001-10001 KJSKLDJDSKL BPV-57 2000 57 1-101-1002-10002 1000 lskdsj BPV-57 1878 2015-03-10 kjhdk 8787
57 2015-03-12 1-101-1001-10001 KJSKLDJDSKL BPV-57 2000 57 1-101-1001-10004 1000 dlksjkl BPV-57 1878 2015-03-10 kjhdk 8787
答案 0 :(得分:0)
表TBLBPVDetails和TBLChequeList之间的当前逻辑是多对多的,因此查询显示所有可能的组合1 * 2 * 2 = 4
您应该在表TBLBPVDetails和TBLChequeList之间找到或创建一对多链接 创建链接的可能方法是为表TBLBPVDetails和TBLChequeList添加主键,或添加列TBLBPVDetails.ChequeNo并使用以下查询:
SELECT TBLBPVMaster.*,TBLBPVDetails.*,TBLChequeList.*
FROM TBLBPVDetails
INNER JOIN TBLBPVMaster
ON TBLBPVDetails.BPVId = TBLBPVMaster.BPVId
INNER JOIN TBLChequeList
ON TBLBPVDetails.ChequeNo = TBLChequeList.ChequeNo
WHERE TBLBPVMaster.BPVId=57
第二种可能(但不是更可取的)方法是隐藏可选字段并使用不同的
来压制dublicate记录 SELECT distinct TBLBPVMaster.*,TBLBPVDetails.BPVId, TBLBPVDetails.Amount, TBLChequeList.*
FROM TBLBPVDetails
INNER JOIN TBLBPVMaster
ON TBLBPVDetails.BPVId = TBLBPVMaster.BPVId
INNER JOIN TBLChequeList
ON TBLBPVMaster.BPVCode = TBLChequeList.BankVoucherCode
WHERE TBLBPVMaster.BPVId=57