Вот мой запрос:
UPDATE invoices SET
version = o.version + 1
,modified = CURRENT_TIMESTAMP
,business_no = $3::numeric
FROM invoices o
LEFT JOIN reps ON reps.rep_id = o.rep_id
LEFT JOIN terms ON terms.terms_id = o.terms_id
LEFT JOIN shipvia ON shipvia.ship_via_id = o.ship_via_id
WHERE o.id = $1::int AND CASE WHEN $2::numeric IS NULL THEN o.business_no IS NULL ELSE o.business_no = $2::numeric END
RETURNING o.id, o.version, o.business_no, ..., terms, rep, ship_via
Он должен был сделать следующее:
- Найдите нужный счет-фактуру по его идентификатору ($1) и, имея ожидаемое значение в поле business_no ($2), установите для поля business_no новое значение ($3).
- Увеличьте поле версии на единицу.
- Вернуть все поля счета-фактуры после обновления.
К сожалению, это не работает, как ожидалось. Вместо того, чтобы обновлять только один счет и возвращать новую версию, он:
- Обновляет все счета
- Возвращает версию счета до обновления, дублированную N раз, где N — общее количество счетов.
Я понимаю, что мой запрос неверен, я просто не понимаю, почему и как это исправить.
FROM
. - person a_horse_with_no_name   schedule 18.05.2018