Обновление нескольких записей в таблице MS Access (UPDATE SELECT UNION ALL) - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу обновить несколько записей, используя один запрос на обновление в MS Access. Я придерживался идеи, упомянутой в этом ответе (https://stackoverflow.com/a/65027/2935885) о вставке нескольких записей с использованием одного запроса.

когда я пытаюсь выполнить этот запрос, он работает:

UPDATE my_table left join (select 'rowid' as col_1, 'updated_value' as col_2 from onerow) new_values ON my_table.col_1 = new_values.col_1 set my_table.col_2 = new_values.col_2

(пустая пустая таблица)

Однако, когда я расширяю его на несколько строк новых значений, MS Access выдает ошибку «Операция должна использовать обновляемый запрос».

UPDATE my_table left join (
select 'rowid1' as col_1, 'updated_value1' as col_2 from onerow 
union all 
select 'rowid2' as col_1, 'updated_value2' as col_2 from onerow 
union all 
select 'rowid3' as col_1, 'updated_value3' as col_3 from onerow 
) new_values ON my_table.col_1 = new_values.col_1 set my_table.col_2 = new_values.col_2

Как это исправить? Или что не так в запросе, который я сделал?

1 Ответ

0 голосов
/ 03 сентября 2018

Нельзя использовать запросы на обновление с запросами объединения, так как полный набор строк должен быть обновляемым, а запросы объединения никогда не обновляются.

Рассмотрите возможность использования таблицы последовательности вместо таблицы с двумя (одной строкой). Таблица последовательности представляет собой таблицу, заполненную порядковыми номерами.

Если бы у вас была таблица последовательности с 100 числами, вы могли бы использовать что-то вроде этого:

UPDATE my_table left join (
    select Choose(s.nr,'rowid1', 'rowid2', 'rowid3') as col_1, Choose(s.nr,'updated_value1','updated_value2','updated_value3')  as col_2 
    from Sequence s
    WHERE s.nr Between 1 And 3
) new_values ON my_table.col_1 = new_values.col_1 set my_table.col_2 = new_values.col_2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...