我目前正在創建一個更新語句,它將更新一個雙時間表。它執行以下操作:在DB2更新中重複子查詢
爲每個ID更新每行,並將RELATION_ID設置爲最新行的RELATION_ID。
在此查詢中,有一個重複的子查詢(因爲我第一次用它來獲得用於更新值),也(我不想更新其已經具備了這種RELATION_ID行)
有的方式重複使用來自所述第一查詢或(需要不編程,純SQL)的值的任何替代方案
UPDATE TBL_CLIENT UPD
SET RELATION_ID = (
SELECT RELATION_ID FROM TBL_CLIENT SUBQ
WHERE UPD.ID = SUBQ.ID AND
UPDATE_TIMESTAMP = (
SELECT MAX(UPDATE_TIMESTAMP) FROM TBL_CLIENT SUBSQ
WHERE SUBSQ.ID = SUBQ.ID
)
)
WHERE ID IN (
SELECT ID
FROM TBL_CLIENT QU
GROUP BY ID
HAVING COUNT(DISTINCT(RELATION_ID)) > 1
) AND
RELATION_ID <> (
SELECT RELATION_ID FROM TBL_CLIENT SUBQ2
WHERE UPD.ID = SUBQ2.ID AND
UPDATE_TIMESTAMP = (
-- Update mit STID des neusten Eintrages
SELECT MAX(UPDATE_TIMESTAMP) FROM TBL_CLIENT SUBSQ2
WHERE SUBSQ2.ID = SUBQ2.ID
)
)
實施例:
ID/RELATION_ID/UPDATE_TIMESTAMP
- 10分之1/ 2000年1月1日
- 一十二分之一/ 2002年1月5日
- 15分之1/ 2008年3月28日
更新後:
- 15分之1/ 1.1.2000
- 1/15/5.1.2002
- 1/15/28.3.2008
最後一行是最近的一排,因此它的關係id被採取(與該行本身沒有更新!對未包括在這裏查詢的另一部分重要的)
謝謝對於任何建議
建議是用'merge'替換'update'。 。 。 http://stackoverflow.com/questions/4184209/inner-join-in-update-sql-for-db2。 – 2013-03-21 13:33:06
表的主鍵是什麼? – 2013-03-21 14:34:20
主鍵由多元素元素組成,包括ID,時間戳記,但不包含Relation_Id – Xavjer 2013-03-21 14:46:56