以前の日付のレコードがあれば、仕事の日付を更新したいと思います。これを達成するために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は、以前のジョブ日付よりも日付のレコードを持っています。だから私はこの仕事を記録日で更新したいと思う。
CTEを選択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句エントリを逃し "CTE"
UPDATE job
SET jobdate=cte.date
WHERE jobid IN (SELECT jobid FROM cte)
SQLFiddle: http://sqlfiddle.com/#!15/e9ae6/8
私はアップデートでcteを使用したことがないので、私は理解するためにいくつかの助けが必要ですです。
TIA、
エクセレント... FROM UPDATEを使用します。一つの解決策は、このようにそれに選択を行うことです。ありがとうございました! – sibert