Вы не можете сослаться на inv_header.rpt_factor
таким образом.Вам нужно будет поместить его в подзапрос.
UPDATE g_fuel_prft
SET billed_qty = ((SELECT inv_header.rpt_factor
FROM inv_header
WHERE g_fuel_prft.prodlnk = inv_header.ivh_link) *
g_fuel_prft.billed_qty)
WHERE EXISTS (SELECT *
FROM g_fuel_prft
JOIN inv_header ON g_fuel_prft.prodlnk = inv_header.ivh_link
WHERE inv_header.ivh_rpt_factor = 0)
С запросом EXISTS список выбора не имеет значения, а *
является обычным.Вам может понадобиться больше ограничений в дополнительном выборе в предложении SET.Это зависит от того, какая связь существует между соединяющимися столбцами (1: 1, 1: N, N: 1, M: N).
Учитывая приведенную ниже минимальную схему, приведенный выше запрос синтаксически допустим.Трудно проверить это без действительных образцов данных.
DROP TABLE IF EXISTS g_fuel_prft;
CREATE TABLE g_fuel_prft
(
prodlnk INTEGER NOT NULL,
billed_qty DECIMAL(8,2) NOT NULL
);
DROP TABLE IF EXISTS inv_header;
CREATE TABLE inv_header
(
rpt_factor DECIMAL(8,4) NOT NULL,
ivh_link INTEGER NOT NULL,
ivh_rpt_factor DECIMAL(8,4) NOT NULL
);