Условное SQL-соединение слева - PullRequest
0 голосов
/ 15 марта 2019

У меня есть две таблицы, и я хотел бы объединить их с ожидаемым результатом.

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 Ответ

2 голосов
/ 15 марта 2019

Вы должны переместить условие b.location = '2001' из условия WHERE в условие JOIN, в противном случае оно превращается в INNER JOIN (см. Параграф о WHERE условиях в руководстве ) т.е.

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, где это условие не выполняется.

...