Синтаксическая ошибка postgresql - PullRequest
0 голосов
/ 05 апреля 2011

Я пытаюсь создать этот оператор обновления, который добавляет среднее время выполнения с сегодняшнего дня во временную таблицу. Я получаю следующую синтаксическую ошибку:

ОШИБКА: ОШИБКА: синтаксическая ошибка в или около Положение "ВНУТРЕННИЙ": 22 * ​​1004 *

Запрос = ОБНОВИТЬ temptbl1 КАК ВНУТРЕННЕЕ СОЕДИНЕНИЕ (выберите jobno, avg (elaptime) как avgrun откуда cmr_runinf где to_timestamp (timestmp, 'ГГГГММДДЧЧ24МИСС')> (сейчас () - интервал '1 ДЕНЬ') GROUP BY JOBNO) AS источник ПО T.jobno = source.jobno SET T.todayrun = source.avgrun

Мое утверждение:

UPDATE temptbl1 AS T
INNER JOIN
(
select jobno, avg(elaptime) as avgrun
from cmr_runinf
where to_timestamp(timestmp, 'YYYYMMDDHH24MISS') > (now() - interval '1 DAY')
GROUP BY JOBNO
) AS source
ON T.jobno = source.jobno
SET T.todayrun = source.avgrun

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

Предложение SET должно следовать после предложения UPDATE.Кроме того, вы, вероятно, хотите где-нибудь предложение FROM.

UPDATE temptbl1 AS T1 
SET T1.todayrun = source.avgrun 
FROM ( 
    SELECT jobno, avg(elaptime) as avgrun 
      FROM cmr_runinf 
     WHERE to_timestamp(timestmp, 'YYYYMMDDHH24MISS') 
           > (now() - interval '1 DAY')
    GROUP BY jobno
) AS source
WHERE T1.jobno = source.jobno

Также см. http://www.postgresql.org/docs/current/interactive/sql-update.html

0 голосов
/ 06 апреля 2011

Как вы понимаете, он пытается выполнить обновление виртуальной таблицы (объединение двух физических таблиц), что недопустимо.

SET должен прийти после обновления

0 голосов
/ 06 апреля 2011
UPDATE temptbl1 AS T1 
SET T1.todayrun = source.avgrun 
FROM ( select jobno
            , avg(elaptime) as avgrun 
       from cmr_runinf 
       where to_timestamp(timestmp, 'YYYYMMDDHH24MISS')
                > (now() - interval '1 DAY')
       GROUP BY jobno     <-- not source.jobno, there is no source inside parenthesis
     ) AS source
WHERE T1.jobno = source.jobno
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...