В настоящее время я создаю инструкцию по обновлению, которая будет обновлять bitemporal таблицу. Он выполняет следующие действия:Повторяющийся подзапрос в DB2 update
Обновите каждую строку для каждого идентификатора и установите 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
Последняя строка была последняя строка, поэтому это отношение идентификатор было принято (и сама строка не была обновлена !, важно для другой части запроса, который не входит сюда)
Спасибо для любых рекомендаций
Совет должен заменить 'update' на' merge'. , , http://stackoverflow.com/questions/4184209/inner-join-in-update-sql-for-db2. –
Что является основным ключом таблицы? –
Первичный ключ состоит из множества элементов, включая идентификатор, временную метку, но не Relation_Id – Xavjer