SQL обновляет несколько строк в целевой таблице с тем же идентификатором, но разными значениями из исходной таблицы - PullRequest
0 голосов
/ 04 декабря 2018

таблица creditNote

id      invoice_id     generated_at(timestamp)            status
10101      111          2018-02-28 14:42:39.247          generated
23982      111          2018-03-30 11:11:11.247          generated 

таблица paymentModeAmount

id      invoice_id     paid_on(timestamp)     payment_mode
98236      111                                 creditNote
63725      111                                 creditNote

После выполнения нижеследующего запроса OUTPUT составляет

таблица paymentModeAmount

id        invoice_id     paid_on(timestamp)       payment_mode
98236        111         2018-02-28 14:42:39.247   creditNote 
63725        111         2018-02-28 14:42:39.247   creditNote 

ЗдесьСтолбец PaidOn содержит те же данные, но нам нужно получить две разные временные метки

Ожидаемые

id      invoice_id     paid_on(timestamp)       payment_mode
98236      111         2018-02-28 14:42:39.247   creditNote 
63725      111         2018-03-30 11:11:11.247   creditNote 

метки оплачиваемого времени должны отличаться, как и ожидалось

Функция PL / SQL

CREATE OR REPLACE FUNCTION updatePaidOn()
RETURNS TABLE(
invoiceid BIGINT,
generatedat TIMESTAMP)
AS $$
BEGIN
RETURN QUERY SELECT
generated_invoice_id as invoiceid, generated_at as generatedat
FROM
credit_note
WHERE
status='generated';
END; $$

LANGUAGE 'plpgsql';

Выполнить приведенную ниже функцию

UPDATE payment_mode_amount pm
SET paid_on = sq.generatedat
from updatePaidOn() as sq
where pm.invoice_id = sq.invoiceid
and pm.paid_on is null
and pm.payment_mode='creditNote';
...