更新MS Access表中的多个记录(UPDATE SELECT UNION ALL)

时间:2018-09-03 11:34:14

标签: sql ms-access

我想使用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

如何解决此问题?还是我的查询出了什么问题?

1 个答案:

答案 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