使用模式匹配更新(MS Access)

Posted

技术标签:

【中文标题】使用模式匹配更新(MS Access)【英文标题】:UPDATE with Pattern Matching (MS Access) 【发布时间】:2021-12-06 15:53:03 【问题描述】:

问题

使用模式匹配运行 UPDATE 查询不会更新所需表上的所有值。这是使用具有 Access 默认值的 Office 365,因此此处不涉及拆分表或 SQL 后端。

示例

一些传入数据有一堆键值对,其中键是要匹配的模式。总体方法是将数据导入表('incoming')并使用 LIKE 执行和 UPDATE 查询以更新主表('main')上的值。

到目前为止,匹配项目还没有问题。问题是设置 all 结果等于正确的值。

例如,传入的数据(在“传入”表中)看起来像...

key    value
P*     P-Type
N*     N-Type

要更新的数据(在“主”表中)看起来像...

name    type
Py      <Empty>
Pa      <Empty>
Pi      <Empty>
Ny      <Empty>
Na      <Empty>
Ni      <Empty>

我想运行一个 UPDATE 查询,结果应该是:

name    type
Py      P-Type
Pa      P-Type
Pi      P-Type
Ny      N-Type
Na      N-Type
Ni      N-Type

我试过这样的查询:

UPDATE incoming RIGHT JOIN main ON main.name LIKE incoming.key SET main.type=incoming.value;

但这只会更新第一个匹配项。用右/左连接愚弄似乎没有奏效。尝试将值设置为子查询(例如 ... SET main.type= (SELECT incoming.value FROM incoming WHERE main.name LIKE incoming.key))不会产生所需的更改。我的努力只让我:

name    type
Py      P-Type
Pa      <Empty>
Pi      <Empty>
Ny      N-Type
Na      <Empty>
Ni      <Empty>

Access 如何获取所有要更新的匹配值?

注意:这个查询是由 VBA 调用的,所以我可以暴力迭代记录集。这是不可取的,因为与 SQL 查询相比,它更复杂且(我假设)更慢。可以通过 SQL 查询访问吗?一般模式是什么?

【问题讨论】:

【参考方案1】:

事实证明,在执行这样的 UPDATE 查询时,您不能依赖“查看:数据表”选项。这个“为什么”对我来说仍然是一个谜。

当您点击 RUN 时,这种查询实际上可以正常工作。在“主”表上验证它。

【讨论】:

以上是关于使用模式匹配更新(MS Access)的主要内容,如果未能解决你的问题,请参考以下文章

Redshift 中的模式匹配检查

PHP ODBC 数据类型不匹配 (MS Access)

MS Access 内连接不精确匹配(通配符或类似)

使用 MS Access 的 C# 标准表达式中的数据类型不匹配?

在 oracle 数据库的所有表中更新与特定模式匹配的列

MS Access 报告给出“数据类型不匹配”错误,但基础查询没有