我想使用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
(onerow是一个虚拟的空表)
但是,当我将其扩展到多个新值行时,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
如何解决此问题?还是我的查询出了什么问题?
答案 0 :(得分:0)
您不能将更新查询与联合查询一起使用,因为完整的行集需要是可更新的,联合查询也永远不可更新。
请考虑使用顺序表而不是双(一行)表。序列表是一个填充有序列号的表。
如果您有一个包含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