条件SQL左连接

问题描述 投票:0回答:1

我有两张桌子,我希望加入他们的预期结果。

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
mysql left-join
1个回答
2
投票

你需要将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行,其中不满足该条件。

© www.soinside.com 2019 - 2024. All rights reserved.