Похоже, что вы уже выполнили сложную часть - вам просто нужно добавить условие в инструкцию UPDATE, которая задает одну строку в EDITION вместо двух строк.Я бы порекомендовал протестировать ваше предложение WHERE с помощью оператора SELECT, чтобы убедиться, что вы получаете именно те строки, которые вам нужны, например:
SELECT *
FROM BOOKDB.EDITION
WHERE Edition.Book in (SELECT ID FROM BOOKDB.Book WHERE Title = 'Encore une fois')
Это возвращает 2 строки, которые вы обновляете в настоящее время, верно?
Так сразу после
WHERE Edition.Book in (SELECT ID FROM BOOKDB.Book WHERE Title = 'Encore une fois')
вы можете добавить
AND Edition.ID = '18'
, или вы можете добавить
AND Edition.Year = '2001'
Если вы хотите более общего назначенияРешение всегда обновлять самую последнюю версию, вы можете сделать подзапрос, чтобы убедиться, что вы выбираете последнюю версию:
AND not exists (select 1 from BOOKDB.Edition e
where e.Book = Edition.Book
and e.Year > Edition.Year)
Как только у вас есть предложение WHERE, которое выбирает нужные вам строки, добавьте его обратнона ваше заявление ОБНОВЛЕНИЕ:
UPDATE BOOKDB.EDITION
SET Translations = XMLQUERY('copy $res := $t
modify insert node element Translation {attribute Language {"Norwegian"}, attribute Publisher {"KLC"}, attribute Price {200}}
as last into $res/Translations
return $res'
PASSING Translations AS "t" RETURNING CONTENT)
WHERE Edition.Book in (SELECT ID FROM BOOKDB.Book WHERE Title = 'Encore une fois')
AND Edition.ID = '18'