访问问题和最佳功能以完成任务

时间:2020-04-22 17:03:32

标签: sql vba ms-access

这里是新用户,我已经阅读了很多线程,但是似乎无法找出完成任务的最佳方法。

当前问题:我正在Access中使用开关功能来实现我的目标。这是我所拥有的,但是出现语法错误?

UPDATE all_rugs_prod
SET construction_facet =
    Switch(
        construction = Machine Woven, Machine Made,
        construction = Machine Made, Machine Made,
        construction = Printed, Printed,
        construction = Hand Hooked, Hand Hooked
        )

all_rugs_prod是数据库, construction_facet是我想返回的值, 建筑是要搜索的领域。

我对这一切都很陌生,因此,我需要尽可能多的帮助..... 背景:我说的是数据库1,然后将字段映射/匹配到数据库2。数据库2还有许多其他字段,需要填充其中的数据,这些字段已添加到数据库2中。

我从数据库1向数据库2创建了一个Append数据库,并匹配了从数据库1追加的与数据库2匹配的那些字段。

我最大的问题是我需要规范化/映射数据库2中的数据。例如:在数据库2中,数据库1中的一个字段具有许多不同的文本值。我需要搜索该字段并根据适合的预定列表带回预定的文本值。所以说在数据库2.field7中,文本为“浅蓝色”,我需要对其进行规范化/映射以将其返回到数据库2.field8中为“蓝色”,依此类推。做到这一点的最佳方法是什么。在某些情况下,例如各种颜色的清单非常长。谢谢!

1 个答案:

答案 0 :(得分:0)

出现语法错误是因为您需要将文字字符串用双引号引起来,例如

"Machine Woven"`

否则,每个由空格分隔的单词将被解释为一个字段(与文字字符串相反),如果在源数据集中找不到该字段,则会将这些字段解释为需要用户要提供的值;但更关键的是,这将导致提供给switch函数的参数过多。

但是,由于您仅更新"Machine Woven"字段中包含值construction的记录的值,因此您的查询可以简化为:

update all_rugs_prod 
set construction_facet = "Machine Made" 
where construction = "Machine Woven"

对于其中许多可能的值代替"Machine Woven"映射到"Machine Made"的情况,我建议创建一个单独的映射表,例如:

Mapping_Table

+---------------------+--------------+
|      map_from       |    map_to    |
+---------------------+--------------+
| Machine Woven       | Machine Made |
| Machine Built       | Machine Made |
| Machine Constructed | Machine Made |
+---------------------+--------------+

然后使用简单的带有内部联接到上述映射表的更新查询来执行隐式选择并更新新值,例如:

update 
    all_rugs_prod inner join mapping_table on
    all_rugs_prod.construction = mapping_table.map_from
set 
    all_rugs_prod.construction_facet = mapping_table.map_to