Sql 内部联接没有给出预期的结果
Sql Inner joins not giving desired results
我想连接三个表。当我连接两个表时查询工作正常
TBLBPVMASTER
AND TBLBPVDETAILS
基于 bpvid
但是当我将 TableCheque
列表与这两个表组合时,我得到了结果,但不是我想要的。
例如 TBLBPVMaster
包含一条针对 BPVID
的记录,TBLBPVDETAILS
包含两条针对 BPVID
的记录,而 chequelist
包含两条针对 [=22= 的记录].现在我想合并这三个表,以便结果查询产生两行。以下查询产生 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
当前表 TBLBPVDetails 和 TBLChequeList 之间的逻辑是多对多的,所以查询显示所有可能的组合 1*2*2 = 4
您应该在表 TBLBPVDetails 和 TBLChequeList 之间查找或创建一对多 link
创建 link 的可能方法是为表 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
第二种可能(但不是更可取)的方法是隐藏可选字段并使用 distinct
抑制重复记录
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
我想连接三个表。当我连接两个表时查询工作正常
TBLBPVMASTER
AND TBLBPVDETAILS
基于 bpvid
但是当我将 TableCheque
列表与这两个表组合时,我得到了结果,但不是我想要的。
例如 TBLBPVMaster
包含一条针对 BPVID
的记录,TBLBPVDETAILS
包含两条针对 BPVID
的记录,而 chequelist
包含两条针对 [=22= 的记录].现在我想合并这三个表,以便结果查询产生两行。以下查询产生 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
当前表 TBLBPVDetails 和 TBLChequeList 之间的逻辑是多对多的,所以查询显示所有可能的组合 1*2*2 = 4
您应该在表 TBLBPVDetails 和 TBLChequeList 之间查找或创建一对多 link 创建 link 的可能方法是为表 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
第二种可能(但不是更可取)的方法是隐藏可选字段并使用 distinct
抑制重复记录 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