Как переписать запрос? - PullRequest
0 голосов
/ 27 декабря 2018

Я могу легко выбрать строки, которые я должен обновить.

select 
   p.id, 
   (regexp_match( p.name, '\d+'))[1] as renum, 
   pd.quantity 
from package p 
left join package_detail pd on 
   pd.package_id = p.id and resource_type_id is null 
where p.name like '%Bit%';

Но как написать запрос на обновление quantity на renum из приведенного выше результата?

Я не являюсьищу запрос.Я ищу правило для выполнения этой задачи.

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете найти фон в документах (https://www.postgresql.org/docs/current/sql-update.html), но если у вас есть запрос, который дает желаемый результат, вы можете использовать этот запрос как коррелированный подзапрос в команде обновления:

UPDATE table1 t1 SET (col1, col2, col3) = (select t2.val1, t2.val2, t2.val3 from table2 t2 where t2.table1_id = t1.id)
 WHERE t1.col1 IS NULL

В вашем случае это может принять форму или что-то похожее на:

UPDATE package p2 SET (quantity) = (
        select ((regexp_match( p.name, '\d+'))[1])::integer + pd.quantity 
        from package p 
         left join package_detail pd on pd.package_id = p.id and resource_type_id is null 
        where p.name like '%Bit%' 
         and p2.id = p.id
         and ((regexp_match( p.name, '\d+'))[1])::integer + pd.quantity IS NOT NULL )
 WHERE p2.name like '%Bit%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...