【问题标题】:UPDATE query joining table and subselect in ACCESS在 ACCESS 中更新查询连接表和子选择
【发布时间】:2015-12-25 18:10:58
【问题描述】:

我正在尝试使用以下代码更新 table1 的字段,但收到以下错误消息:3073 操作必须使用可更新查询。

UPDATE table1 a 
INNER JOIN (SELECT COUNT(somevalue) AS Total,ID 
FROM ReadsPNPA GROUP BY ID) b 
ON a.ID=b.ID 
SET a.Total = b.Total 

有什么想法吗?子选择查询独立工作。

【问题讨论】:

  • 一种解决方法是将子选择存储到“临时”表中并加入这两个表。但是我想知道如何在不使用“临时”表的情况下实现这一点。
  • 为什么临时表不是一个选项?对永久表的更新会起作用吗?这也是一种选择。您还可以将子选择查询放入视图中,具体取决于您要完成的任务。
  • 这是一个选项,这也是我目前所做的。但是我仍然想知道上述方法有什么问题。
  • 所以我的问题可以转换为“我可以通过子选择查询加入表来更新表吗?”

标签: sql vba ms-access ms-access-2007


【解决方案1】:

使用DCount 表达式而不是子查询来执行您的UPDATE ...

UPDATE table1 a 
SET a.Total = DCount('somevalue', 'ReadsPNPA', '[ID]=' & a.ID);

访问UPDATE 查询很麻烦。子查询或GROUP BY 等技术会导致 Access 将查询视为“不可更新”。请参阅Why is my query read-only? 了解更多信息。

您可以使用域聚合函数(例如DCountDSumDAvg 等),以便 Access 将查询视为可更新。

【讨论】:

  • 感谢您提供替代解决方案,但我避免使用仅访问功能。 (例如 Dfunctions)出于迁移原因。
  • 不幸的是,加入子查询的 Access UPDATE 将始终触发您现在遇到的相同错误。如果您不想要访问域功能,请将子查询数据放入临时表并加入该表。但是我看到你也不想要那样。没有其他选择。
  • 再次感谢您确认无法通过这种方式实现!好吧,我现在必须使用这种方法,这在性能方面不一定很糟糕(至少我认为)。我只是好奇这是否可能!最后一个问题,缩小问题的范围,是我在子查询中使用聚合函数或使用任何子查询会弹出相同错误的问题吗?提前感谢您的时间!
  • 我认为任何子查询。但是请阅读我链接的页面中 Allen Browne 对这个主题的看法。
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多