条件SQL左联接

时间:2019-03-15 02:54:45

标签: mysql left-join

我有两个桌子,我想加入他们并获得预期的结果。

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

1 个答案:

答案 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行。