У меня есть следующая таблица, которую мне нужно обновить:
USER:
| ID | ACTIVE | REF_COL | COL_2 | COL_3 |
|----|--------|---------|-------|-------|
| 1 | 1 | value | value | value |
| 2 | 0 | value | value | value |
| 3 | 1 | value | value | value |
Я выполняю следующие две UPDATE
инструкции отдельно:
Statement-1
UPDATE
USER
SET
ACTIVE = 1
WHERE
REF_COL IN (
-- Subquery that generates a list of values
)
Statement-2
UPDATE
USER
SET
ACTIVE = 0
WHERE
REF_COL NOT IN (
-- Subquery that generates a list of values
)
Подзапрос, который генерирует список значений, одинаков для обоих UPDATE
запросы.
Есть ли способ, который поможет мне выполнить запрос сразу, например MERGE
?
Следующий запрос с использованием оператора MERGE
недействителен:
MERGE INTO USER U
USING (
-- Subquery that generates a list of values
) T
ON (U.REF_COL = T.VALUE)
WHEN MATCHED THEN
UPDATE SET U.ACTIVE = 1
WHEN NOT MATCHED THEN
UPDATE SET U.ACTIVE = 0
Поскольку предложение WHEN NOT MATCHED THEN
предполагает наличие оператора INSERT
.