Обновить несколько полей из подзапроса - PullRequest
0 голосов
/ 12 января 2020

Текущий запрос:

update topics set posts = (select count(*) from posts where tid = 27), lastpost = (select max(pid) from posts where tid = 27) where tid = 27;

Как объединить два подзапроса в этот запрос обновления?

select count(*), select max(pid) from posts where tid = 27)

Я мог бы выполнить это как два отдельных запроса очевидно (чтение значений из сообщений, запись значений в темы), но я бы хотел сделать это в одном запросе, если это возможно.

1 Ответ

0 голосов
/ 12 января 2020

Вы можете использовать inner join в операторе обновления:

update topics t
  join (
        select tid, count(*) as cnt, max(pid) as mx
          from posts
         group by tid
       ) p on p.tid = t.tid 
   set posts = p.cnt, lastpost = p.mx
 where t.tid = 27;

Демо

В качестве примечания : В этом случае не требуется, но начиная с версии окна DB 10.2, функции анализа c могут также использоваться вместе с функциями агрегирования.

...