如果任何記錄是早期日期,我想更新作業日期。嘗試使用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)
選擇CTE顯示正確的,工作2應更新
SELECT * FROM cte
但更新給出了一個錯誤:缺少FROM子句爲表 「CTE」
UPDATE job
SET jobdate=cte.date
WHERE jobid IN (SELECT jobid FROM cte)
SQLFiddle條目: http://sqlfiddle.com/#!15/e9ae6/8
我從來沒有用過更新的cte,所以我需要一些幫助來理解th是。
TIA,
優秀。謝謝! – sibert