我有两张桌子,我希望加入他们的预期结果。
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
你需要将b.location = '2001'
条件从WHERE
条款移动到JOIN
条件,否则它将变成INNER JOIN
(参见关于WHERE
中的manual条件的段落),即
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'
正如@ysth所说,将b.location = '2001'
条件添加到WHERE
子句意味着b.location
不能是NULL
,否则它将成为不匹配的行,从而从结果中排除这些行。通过向LEFT JOIN
添加条件,我们返回具有b.location = '2001
的行,但仍然返回空b行,其中不满足该条件。