我有两个桌子,我想加入他们并获得预期的结果。
Table 1:ItemUOM Itemcode UOM Rate Item00123 Pkt454g 454 Item00123 Pkt252g 252 Item00123 GM 1
Table 2: vItemBalQty Itemcode UOM BalQty Location Item00123 PKT454g 200 2001 Item00123 PKT252g 150 2001
Expected Result: Itemcode UOM BalQty Location Item00123 PKT454g 200 2001 Item00123 PKT252g 150 2001 Item00123 GM 0 2001
但是我查询的实际结果与预期结果不同。
select a.ItemCode,a.uom,coalesce(b.BalQty,0.00) from itemuom a
left join vItemBalQty b on b.ItemCode = a.ItemCode and a.uom = b. uom
where a.itemcode = 'Item00123' and b.location ='2001'
Actual Result: Itemcode UOM BalQty Location Item00123 PKT454g 200 2001 Item00123 PKT252g 150 2001
答案 0 :(得分:2)
您需要将b.location = '2001'
条件从WHERE
子句移到JOIN
条件,否则它将变成INNER JOIN
(请参阅关于{{1 }} manual中的条件,即
WHERE
正如@ysth所说,在select a.ItemCode,a.uom,coalesce(b.BalQty,0.00)
from itemuom a
left join vItemBalQty b on b.ItemCode = a.ItemCode and a.uom = b. uom and b.location ='2001'
where a.itemcode = 'Item00123'
子句中添加b.location = '2001'
条件意味着WHERE
不能为b.location
,否则将是针对不匹配的行的,因此将这些行从结果中排除。通过将条件添加到NULL
中,我们返回具有LEFT JOIN
的行,但仍返回不满足该条件的空b行。