Вы пытаетесь использовать псевдонимы, которые вы определили в Src подзапроса вне подзапрос. Это никогда не сработает.
Я предложил бы использовать псевдонимы таблиц, чтобы сделать ссылки столбцов легче увидеть - вот что я хотел бы сделать:
merge into costing.tb1 tgt
using (select t1.rowid row_id,
t2.waers
from costing.tb2 t2
join costing.tb3 t3 on t2.bukrs = t3.bukrs
join costing.tb1 t1 on t3.mandt = client -- missing alias on client
and t3.bwkey = t1.plant
where currency_conversion_status <> 'Pricing Missing' -- missing alias on currency_conversion_status
) src
on (tgt.rowid = src.row_id)
when matched then
update set tgt.currency = src.waers;
Я бы посоветовал вам добавить недостающие псевдонимы от клиента и currency_conversion_status, так что вы можете указать, к каким таблицам они принадлежат.
Если клиент представляет собой столбец в costing.tb1, то возможно, вам не нужно включать присоединитесь к ТВ1 в подзапроса, вы можете просто присоединиться к нему непосредственно в операторе MERGE, что-то вроде:
merge into costing.tb1 tgt
using (select t3.mandt,
t3.bwkey,
t2.waers
from costing.tb2 t2
join costing.tb3 t3 on t2.bukrs = t3.bukrs
where currency_conversion_status <> 'Pricing Missing' -- missing alias on currency_conversion_status
) src
on (tgt.client = src.mandt
and tgt.plant = src.bwkey)
when matched then
update set tgt.currency = src.waers;
Хотя, поскольку я не знаю, к какой таблице принадлежит currency_conversion_status, вам, возможно, придется перемещаться туда, куда идет предложение where.
Делая это, вы удаляете ненужное соединение в таблицу costing.tb1, что должно улучшить производительность оператора.
он показывает недопустимый идентификатор, если я добавляю псевдоним tgt в currency_conversion_status. – param
Эта колонка находится в tb1? Если это так, переместите это где к внешнему запросу (то есть набор обновлений ... где ...) – Boneist
да, это сработало ... :) .. спасибо – param