Обновите значения в одной таблице из трех других объединенных таблиц в H2 (и DB2) - PullRequest
3 голосов
/ 02 марта 2012

Я пытаюсь добиться чего-то подобного описанному здесь в H2:

Обновление с внутренним объединением?

обновить tlegacy lca set lca.pr_dato = ca.calc_holdings_date
... из tca ca внутреннее соединение tdd dd on ...

, и я получаю сообщение об ошибке: столбец "CA.CALC_HOLDINGS_DATE" не найден в H2.

Поле "отсутствует"конечно присутствует.Я попробовал несколько вариантов без удачи.Поддерживает ли H2 этот способ обновления значений в одной таблице, собранной из ряда других объединенных таблиц?В конце концов это должно работать на IBM DB2.Там поддерживается?

1 Ответ

7 голосов
/ 02 марта 2012

Для H2 есть два варианта. Первый будет работать для всех баз данных:

update tlegacy lca set 
  lca.pr_dato = (select ca.calc_holdings_date ... from tca ca where ...)
  where lca.id in (select ca.id from tca where ...)

Второй вариант - использование нестандартного оператора MERGE . Он вставит новые строки, если строки с этим ключом еще не существует.

merge into tlegacy(pr_dato) key(id) 
  select ca.calc_holdings_date, ca.id from tca ca where ...
  and exists (select * from tlegacy where ...)
...