Вам нужно UPDATE ... FROM
, чтобы иметь возможность ссылаться на столбец внутри запроса в обновлении.Соедините их в предложении WHERE
позже.
UPDATE stock_picking u SET posting_date = t.date_invoice
FROM (
SELECT DISTINCT ON (sp.id)
sp.id, inv.date_invoice
FROM stock_picking sp
INNER JOIN stock_move sm ON sp.id = sm.picking_id
INNER JOIN sale_order_line sol ON sm.sale_line_id = sol.id
INNER JOIN sale_order so ON sol.order_id = so.id
INNER JOIN sale_order_invoice_rel so_inv_rel on so.id = so_inv_rel.order_id
INNER JOIN account_invoice inv on so_inv_rel.invoice_id = inv.id
WHERE
sp.posting_date != inv.date_invoice
and sm.posting_date != inv.date_invoice
and sp.state = 'done'
and inv.state in ('open', 'paid')
ORDER BY sp.id, inv.date_invoice DESC
) t
WHERE u.id = t.id
Поскольку я не знаю вашу модель, я предположил, что соотношение между stock_picking
и account_invoice
может быть 1: N, таким образом используя DISTINCT ON
вернет только один date_invoice
для каждого id
.Вы можете использовать агрегатную функцию GROUP BY
+ MAX/MIN
для достижения того же результата.
Обратите внимание на использование псевдонимов таблиц t
и u
.