使用类似数据重复记录

时间:2015-05-27 07:36:31

标签: sql vb.net join sql-server-ce

Image to show Database structure and relations

我有这种情况,如上图所示。我正在开发库存系统,我需要检索交易记录。所有表都与Primary-Foreign关系相关,并使用INNER JOIN连接。

目前,当查询触发时,我将获取采购订单的所有记录。我需要检索Transaction的记录。例如对于图像中的此采购订单,我只进行了两次交易,并且我只想要两条记录作为交易结果。我知道我可以使用OUTER JOINS来做到这一点,但我尝试了但是没有得到正确的结果。

有人有任何想法吗?

以下是实际查询:

SELECT tblPurchaseMain.Purchase_Main_ID, tblPurchaseMain.Purchase_Date, tblPurchaseMain.TotalAmount, tblSupplier.Supplier_Name, tblPurchaseDetail.Purchase_Detail_ID, tblPurchaseDetail.Quantity, tblPurchaseDetail.Rate, tblPurchaseDetail.Amount, tblProduct.Product_Name, tblProductCategory.Product_Category_Name, tblTransaction.Transaction_Date, tblTransaction.Transaction_Amount, tblTransaction.Transaction_Mode FROM tblPurchaseTransaction INNER JOIN tblPurchaseMain ON tblPurchaseTransaction.Purchase_Main_ID = tblPurchaseMain.Purchase_Main_ID INNER JOIN tblPurchaseDetail ON tblPurchaseMain.Purchase_Main_ID = tblPurchaseDetail.Purchase_Main_ID INNER JOIN tblSupplier ON tblPurchaseMain.Supplier_ID = tblSupplier.Supplier_ID INNER JOIN tblTransaction ON tblPurchaseTransaction.Transaction_ID = tblTransaction.Transaction_ID INNER JOIN tblProduct INNER JOIN tblProductCategory ON tblProduct.Product_Category_ID = tblProductCategory.Product_Category_ID ON tblPurchaseDetail.Product_ID = tblProduct.Product_ID

3 个答案:

答案 0 :(得分:1)

看起来你正在加入与之无关的事情。

单次购买主条目有两笔交易,但您有四个购买明细条目。

在交易和购买详细信息之间似乎没有有效的关系,因此SQL Server基本上会向您显示每笔交易的每条购买详细记录。

您需要从查询中删除购买详情和产品,或在交易和购买详情之间添加关系。

答案 1 :(得分:1)

您忘了标记您的DBMS。我想这是你正在使用的MySQL?因为查询中存在 ON子句,并且MySQL是我所知道的唯一不会报告此错误的DBMS,而是默默地将INNER JOIN转换为 CROSS JOIN 相反。修复此错误,看看这是否解决了您的问题。

如果您仍然获得比您想要的更多的行,那么让我们更仔细地看一下:您的数据模型允许您每次交易都有很多购买,每次购买都有很多交易。因此,如果您希望每个交易都有一个结果记录,那么您必须 GROUP BY 交易,并考虑要显示的聚合字段。例如,对于一个事务,这可能是SUM(tblPurchaseMain.TotalAmount)。但是,请注意,您可能仍然会隐含地显示重复的金额,因为同一次购买可以在多个交易中进行。 (例如,总额为100美元的购买1与交易A和B相关联。因此,您将显示A 100 $和B 100 $。)所以也许您根本不想显示tblPurchaseMain.TotalAmount或者可能甚至你的数据模型都是错误的。

答案 2 :(得分:-1)

可能是由于您的表格链接,您可以尝试将关键字DISTINCT添加到您的select语句中,请参阅下面的示例。

SELECT DISTINCT FIELD1,FIELD2 from TABLE