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。 我认为加入是错误的。
答案 0 :(得分:0)
尝试在WHERE子句或JOIN语句中添加其他条件
答案 1 :(得分: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。
然后检查每个步骤的结果,您将知道额外行的来源。