Я хочу обновить дату задания, если какие-либо записи являются более ранней датой. Попытка использовать CTE для достижения этой цели:Обновить с результатом cte (postgresql)
CREATE TABLE job
(jobid int4, jobdate date);
INSERT INTO job
(jobid, jobdate)
VALUES
(1, '2016-02-01'),
(2, '2016-02-01'),
(3, '2016-02-01'),
(4, '2016-02-01')
;
CREATE TABLE rec
(recid int4, recjob int4, recdate date);
INSERT INTO rec
(recid, recjob, recdate)
VALUES
(1,1,'2016-02-01'),
(2,2,'2016-01-01'),
(3,3,'2016-02-01'),
(4,4,'2016-02-01')
;
Номер задания 2 имеет запись, датированную датой, предшествующей дате работы. Поэтому я хочу обновить это задание с датой записи.
WITH cte AS
(SELECT jobid,least(min(recdate),jobdate)
FROM job
LEFT JOIN rec ON recjob=jobid
GROUP BY jobid,jobdate
HAVING least(min(recdate),jobdate)<jobdate)
Выбор КТР показывает правильно, что работа 2 должна быть обновлена
SELECT * FROM cte
Но обновление выдает ошибку: отсутствует FROM-п запись для таблицы "КТР"
UPDATE job
SET jobdate=cte.date
WHERE jobid IN (SELECT jobid FROM cte)
SQLFiddle: http://sqlfiddle.com/#!15/e9ae6/8
Я никогда не использовал cte с обновлением, поэтому мне нужна помощь для понимания является.
ТИА,
Отлично. Спасибо! – sibert