Как обновить одну таблицу из другой таблицы, имеющей более 1 строки, с соответствующими условиями? - в postgreSQL - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть таблица A с столбцами product_id, cost, year, квартал, ... et c. У меня есть другая таблица B со столбцами product_id, base_cost, current_year, p_year, p_quarter, p_order.

Я хочу написать запрос на обновление для обновления A из B. Мои условия -

WHERE A.product_id=B.product_id
and A.year=B.current_year
and A.year=B.p_year and A.quarter>B.p_quarter
and A.cost=0;

Но проблема в том, что при этих условиях, если у меня более одной строки в B, я хочу обновлять только те строки B, которые имеют минимум всех четвертей.

Пример 1-

Если A имеет одну строку как:

product_id  cost   year  quarter
102         0      2019  1
102         0      2019  2
102         0      2019  3
102         0      2019  4

И B имеет две строки, соответствующие предложению where:

product_id  cost  current_year p_year  quarter
102         3.5   2019         2019     3      
102         1.8   2019         2019     1      
102         0.5   2019         2019     2      

Тогда обновленный A должен быть:

product_id  cost   year  quarter
102         0      2019  1
102         1.8    2019  2
102         1.8    2019  3
102         1.8    2019  4

1 Ответ

1 голос
/ 12 апреля 2020

Это проблема, которую необходимо применить к таблице b в дополнительном выборе:

UPDATE A
  SET cost = B.base_cost
FROM (
  select distinct on (product_id, current_year) product_id, current_year, cost
  from b
  order by product_id, current_year, quarter
) b  
WHERE A.product_id = B.product_id
  AND A.year = B.current_year
  AND A.cost = 0
...