Я хотел бы преобразовать коррелированный подзапрос в использование предложения WITH.
Следующий запрос:
select count(*)
from item_master im
left join item_branch ib
on im.IMLITM = ib.IBLITM
left join supply_item si
on im.IMLITM = si.PCLITM
where true
and trim(ib.IBSTKT) in ('P', '7')
and trim(ib.IBVEND) in (
select distinct sii.PCAN8
from supply_item sii
where true
and trim(sii.PCMCU) in ('MXN09M', 'USNELP', 'USNELS')
and sii.PCAN8 not in (60001, 60002, 60003, 60004, 60005, 60006, 60007, 60008, 60009, 60011)
and sii.PCLITM = ib.IBLITM ---------> CORRELATED SUBQUERY COMES HERE
)
Это моя попытка.
with tbl as (
select distinct sii.PCAN8 as PCAN, sii.PCLITM as PCLITM
from supply_item sii
where true
and trim(sii.PCMCU) in ('MXN09M', 'USNELP', 'USNELS')
and sii.PCAN8 not in (60001, 60002, 60003, 60004, 60005, 60006, 60007, 60008, 60009, 60011)
)
select count(*)
from item_master im
left join item_branch ib
on im.IMLITM = ib.IBLITM
left join tbl
on im.IMLITM = tbl.PCLITM
where true
and trim(ib.IBSTKT) in ('P', '7')
and trim(ib.IBVEND) in tbl.PCAN
Я получаю сообщение об ошибке no such table: tbl.PCAN
. Я не уверен, почему я иду не так. Я предоставляю столбец для проверки для предложения in
, как и прежде.