我目前正在创建一个更新语句,它将更新一个双时间表。它执行以下操作:在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