我目前正在创建一个更新语句,它将更新一个双时态表。它执行以下操作:
为每个 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
- 1 / 10 / 1.1.2000
- 1 / 12 / 5.1.2002
- 1 / 15 / 28.3.2008
更新后:
- 1 / 15 / 1.1.2000
- 1 / 15 / 5.1.2002
- 1 / 15 / 28.3.2008
最后一行是最近的行,因此它的关系 id 被采用(并且行本身没有更新!,对于此处未包含的查询的其他部分很重要)
感谢您的任何建议