2014-01-27 45 views
-4
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' 

在這個查詢記錄來了4但應取2 我想加盟錯了。在SQL查詢的記錄即將雙

回答

0

不知道你的表結構是什麼,很難想出解決辦法。您還應該嘗試格式化SQL以檢查邏輯結構。我認爲你的問題在於你正在做3 外部加入。外部聯接選擇行(相應的左側或右側)是否匹配某些內容。

我的建議是將查詢分解爲單獨的查詢和臨時表以查看重複項來自何處。然後你會知道將外部聯接更改爲內部聯接的位置。嘗試這種方法:

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) 

第三步將正確的外部聯接,您將放置到表temp3中。

然後檢查每一步的結果,你就會知道多餘的行來自哪裏。

0

嘗試添加WHERE子句中的附加條件或JOIN聲明