【发布时间】:2015-03-13 10:29:43
【问题描述】:
我想加入三个表。当我加入两个表时,查询工作正常
TBLBPVMASTER AND 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
【问题讨论】:
-
when i combine TableCheque list with these two tables i get results but not as desired..想要的输出是什么,你现在得到什么? -
正如我解释的那样,所需的输出应该根据 BPVCODE 给出两行检查列表,因为它包含两行针对该 bpv 代码,但上面的查询给了我 4 行。
-
能否包含表格的示例数据和所需的输出插图。
-
4 行正是人们所期望的,考虑到您的数据和连接。您有一行要连接到一个表中的另外 2 行,以及另一个表中的 2 行。因此,您将获得 2 * 2 = 4 行。你能解释一下为什么你期待 2 行吗?听起来您认为 TBLChequeList 中的一条记录应该对应 TBLBVDetails 中的一条记录,这意味着您总共会得到两行,但是您认为这些记录将如何链接?
-
太好了,那么您只需要弄清楚如何将这些记录中的数据相互链接。显然,BPVCode/BankVoucherCode 是不够的,因为它们与 2 和 3 相同。如果您知道为什么需要 1 和 4,那么您必须将其包含在查询中。如果您的表格中没有 nothing 来建立该链接,那么 that 就是您的问题 :)
标签: sql sql-server join