SQL 服务器 : join tables causes the data to duplicate on every row

标签 sql sql-server

我有一个返回一些冗余数据的查询。有人可以帮我更正这个查询吗?我也附上了表格关系。

SELECT
   dbo.supplierOrder.sectionID,
   dbo.supplierOrder.supplierID,
   dbo.supplierOrder.supplierOrderNo,
   dbo.supplierOrder.supplierOrderCreated,
   dbo.supplierOrder.supplierOrderConfirmStatus,
   dbo.supplierOrderDetails.productID,
   dbo.supplierOrderDetails.orderQty,
   dbo.supplierOrderReceive.invoiceno,
   dbo.supplierOrderReceive.supplierInvoiceno,
   dbo.supplierOrderReceive.ID,
   dbo.supplierOrderReceiveDetail.qtyArrived
FROM
   dbo.supplierOrder
INNER JOIN
   dbo.supplierOrderDetails ON (dbo.supplierOrderDetails.supplierOrderID = dbo.supplierOrder.ID)
INNER JOIN 
    dbo.supplierOrderReceive ON (dbo.supplierOrderReceive.supplierOrderID = dbo.supplierOrder.ID)
INNER JOIN 
    dbo.supplierOrderReceiveDetail ON (dbo.supplierOrderReceiveDetail.supplierOrderReceiveID = dbo.supplierOrderReceive.ID)       
WHERE
   dbo.supplierOrder.ID = 1 ; 

这是我得到的输出

这不是我想要的。最后一列 qtyArrived 应该只显示它​​的相关数量,但在这里你可以看到它对每个 productID 重复

enter image description here

这是数据库表和关系 enter image description here

enter image description here

最佳答案

我认为最后一张表还应该使用 ProductId 连接,而不仅仅是 OrderID :

LEFT JOIN 
    dbo.supplierOrderReceiveDetail
ON  
(dbo.supplierOrderReceiveDetail.supplierOrderReceiveID=dbo.supplierOrderReceive.ID)
AND 
(dbo.supplierOrderReceiveDetail.ProductID =dbo.sdbo.supplierOrderDetails.ProductID)

关于SQL 服务器 : join tables causes the data to duplicate on every row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756956/

相关文章:

sql - MySQL - 通过索引防止表中的重复记录?

php - 循环并显示来自数据库sql的多个表行

sql-server - 无法使用特殊主体 dbo : Error 15405

.net - 事务应该在存储过程外部还是内部指定?

c# - 在 C# 的 SQL 语句中使用局部变量值

sql-server - Microsoft Codename "Data Transfer"标识列错误

mysql - SQL:是否可以为连接表分配名称

mysql - 在 ireport 中使用 SQL 查询来报告用户反馈

MySQL 事务不停止 for 循环中的竞争条件

c# - 为什么存储过程比查询快