从多个表获取数据时,sql server重复结果

时间:2015-12-01 20:53:05

标签: sql-server join

我对SQL SERVER有一个小问题。 建筑物购买和斯托克斯系统我想从3个表中检索数据: -

Tables Structure

查询:

SELECT Tbl_Products.Product_Name, Tbl_PurchaseDetails.BuyPrice, Tbl_PurchaseDetails.AllPieceBoxes, Tbl_PurchaseDetails.TotalPrice, Tbl_PurchaseHeader.purchaseOrder 
FROM Tbl_Products 
INNER JOIN Tbl_PurchaseHeader  ON Tbl_Products.Product_ID = Tbl_PurchaseHeader.ProductId 
INNER JOIN Tbl_PurchaseDetails ON Tbl_PurchaseHeader.purchaseOrder = Tbl_PurchaseDetails.PurchaseOrder

Query Result

Product_Name          BuyPrice  AllPieceBoxes  TotalPrice  purchaseOrder
--------------------  --------  -------------  ----------  -------------
Dell Alien-Ware       2500.000  5              12500.000   1
KINGSTON-Desktop 8GB  2500.000  5              12500.000   1
Dell Alien-Ware       95.00     10             950.000     1
KINGSTON-Desktop 8GB  95.00     10             950.000     1

1 个答案:

答案 0 :(得分:0)

鉴于下面的连接,我认为在Tbl_PurchaseHeader中有给定Product_ID的多行,然后您将与tbl_PurchaseDetails连接。例如,如果Tbl_PurchaseHeader中有两行,Product_ID为1,那么您将与Tbl_PurchaseDetails连接两次,因此1 Tbl_Products提供2个Tbl_PurchaseHeader,如果Tbl_PurchaseDetails中有多个(比如3个)行,那么您将获得额外的2 x 3所以6行。

FROM Tbl_Products 
    INNER JOIN Tbl_PurchaseHeader ON Tbl_Products.Product_ID = Tbl_PurchaseHeader.ProductId 
    INNER JOIN Tbl_PurchaseDetails ON Tbl_PurchaseHeader.purchaseOrder = Tbl_PurchaseDetails.PurchaseOrder

查看您的数据,针对每个表执行单独的SELECT并跟踪数据,以查看a)Product_ID然后是PurchaseOrder返回的行数。

相关问题