Учитывая, что есть 2 таблицы:
- STATES (содержит список доступных состояний) - ключевое поле = STATE_ID. Другой ключ - DOMAIN_ID, STATE_NAME. Таким образом, существуют записи с одинаковым STATE_NAME, но с другим DOMAIN_ID.
- OBJECTS (содержит список всех объектов, каждый со своим состоянием) - поле ключа = OBJECT_ID. Также содержит поле STATE_ID.
Предположим, у меня есть список из примерно 1000 объектов, которые необходимо обновить до состояния "ЗАКРЫТО" в соответствующих доменах.
Для одного объекта (скажем, OBJECT_ID 12345) я могу использовать оператор SQL:
update OBJECTS
set STATE_ID =
(
select STATE_ID from STATES
where STATE_NAME= 'CLOSED'
and DOMAIN_ID =
(
select DOMAIN_ID from STATES a, OBJECTS b
where a.STATE_ID = b.STATE_ID and b.OBJECT_ID = 12345)
)
) where OBJECT_ID = 12345
Можно ли использовать один оператор для обновления более одного объекта? Суть проблемы, кажется, в том, что я не могу обойти определение OBJECT_ID в двух местах в операторе SQL.
По понятным причинам следующее утверждение не сработает:
update OBJECTS
set STATE_ID =
(
select STATE_ID from STATES
where STATE_NAME= 'CLOSED'
and DOMAIN_ID =
(
select DOMAIN_ID from STATES a, OBJECTS b
where a.STATE_ID = b.STATE_ID and b.OBJECT_ID in
(
select distinct OBJECT_ID from OBJECTS_TO_UPDATE
)
)
) where OBJECT_ID in (select distinct OBJECT_ID from OBJECTS_TO_UPDATE)
Может ли кто-нибудь дать мне подсказку о том, что я мог бы сделать, чтобы обойти это?
Спасибо.