Sql server 在SQL中,查询记录是双重的

Sql server 在SQL中,查询记录是双重的,sql-server,Sql Server,在这个查询中,记录是4,但它应该是2。 我认为连接是错误的。尝试在WHERE子句或JOIN语句中添加一个附加条件不知道表结构是什么,很难理解这一点。您还应该尝试格式化SQL以检查逻辑结构。我认为你的问题在于你在做3个外部连接。外部联接选择行(相应地向左或向右),无论它们是否匹配某些内容 我的建议是将查询分解为带有临时表的单独查询,以查看重复项来自何处。然后您将知道在何处将外部联接更改为内部联接。尝试以下方法: SELECT DISTINCT dbo.productsnrwmtrls.item_N

在这个查询中,记录是4,但它应该是2。
我认为连接是错误的。

尝试在WHERE子句或JOIN语句中添加一个附加条件

不知道表结构是什么,很难理解这一点。您还应该尝试格式化SQL以检查逻辑结构。我认为你的问题在于你在做3个外部连接。外部联接选择行(相应地向左或向右),无论它们是否匹配某些内容

我的建议是将查询分解为带有临时表的单独查询,以查看重复项来自何处。然后您将知道在何处将外部联接更改为内部联接。尝试以下方法:

SELECT DISTINCT dbo.productsnrwmtrls.item_Name,
                dbo.estimatesdtls.estm_Id        AS invc_Id,
                dbo.estimatesdtls.item_Id,
                dbo.estimatesdtls.estm_Qntydlvrd AS invc_Qnty,
                dbo.estimatesdtls.estm_Itemprice AS invc_Itemprice,
                dbo.estimatesdtls.estm_Lntotl    AS invc_Lntotl,
                dbo.productsnrwmtrls.item_Uom,
                quotationsdtls.quot_itemDesc,
                dbo.estimatesdtls.estm_Qntyordrd
FROM   dbo.estimatesdtls
       LEFT OUTER JOIN dbo.productsnrwmtrls
         ON dbo.estimatesdtls.item_Id = dbo.productsnrwmtrls.item_Id
       LEFT OUTER JOIN estimates
         ON estimates.estm_ID = estimatesdtls.estm_ID
       RIGHT OUTER JOIN quotationsdtls
         ON quotationsdtls.quot_ID = estimates.quot_ID
WHERE  dbo.estimatesdtls.estm_Id = '105' 
第三步是将其放入表temp3中的右外部联接

然后检查每个步骤的结果,您将知道额外的行来自何处

select
  a.item_Name, a.item_uom,
  b.estm_Id, b.estm_Qntydlvrd, b.estm_Itemprice, b.estm_Lntotl
into temp1
from dbo.productsnrwmtrls a left outer join dbo.estimatesdtls
  on (a.item_Id = b.item_Id)

select
  c.item_Name, c.item_uom,
  c.estm_Id, c.estm_Qntydlvrd, c.estm_Itemprice, c.estm_Lntotl
  d.quot_Id
into temp2
from temp1 c left outer join dbo.estimates d
  on (c.estm_ID = d.estm_ID)