我有这种情况,如上图所示。我正在开发库存系统,我需要检索交易记录。所有表都与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
答案 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