首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Access DB使用来自另一个表的值更新另一个表

Access DB使用来自另一个表的值更新另一个表
EN

Stack Overflow用户
提问于 2009-04-24 19:15:57
回答 3查看 40.8K关注 0票数 11

我正在尝试用在另一个表中找到的值更新另一个表中的所有记录。

我尝试了同一基本查询的多个版本,但总是得到相同的错误消息:

操作必须使用可更新的查询。

你对为什么这个查询在Access DB中不能工作有什么想法吗?

代码语言:javascript
复制
UPDATE inventoryDetails as idet
SET idet.itemDesc = 
(
    SELECT bomItemDesc
    FROM BOM_TEMPLATES as bt
    WHERE bt.bomModelNumber = idet.modelNumber
)

我也尝试过这样做,因为我意识到由于第二个表中每个型号都有多个型号记录,所以我只需要为每个型号找到的第一个记录中的第一个描述。

代码语言:javascript
复制
UPDATE inventoryDetails as idet
SET idet.item_desc = 
(
    SELECT TOP 1 bomItemDescription 
    FROM BOM_TEMPLATES as bt
    WHERE bt.bomModelNumber = idet.modelNumber
)

但是...still得到了同样的错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-24 19:24:21

您必须使用连接

代码语言:javascript
复制
UPDATE inventoryDetails 
INNER JOIN BOM_TEMPLATES ON inventoryDetails.modelNumber = BOM_TEMPLATES.bomModelNumber 
SET inventoryDetails.itemDesc = [bomItemDesc];
票数 19
EN

Stack Overflow用户

发布于 2009-04-27 12:51:25

Any thoughts on why this query won't work in Access DB

答案是肯定的,因为ACE/Jet SQL语法不符合SQL-92 (即使处于ANSI-92查询模式!)。

我假设你的查询是一个标量的子查询。ACE/Jet根本不支持这种构造。

JOIN/Jet有它自己古怪和有缺陷的UPDATE..JOIN语法,有缺陷的原因是引擎没有强制ACE ed的值是标量的,并且它可以自由地静默使用任意值。它又一次不同于SQL Server自己的UPDATE..JOIN语法,但至少SQL Server支持标准标量子查询作为替代。ACE/Jet迫使您要么学习它奇特的不可移植方式,要么使用替代的SQL产品。

抱歉,听起来很负面: ACE/Jet引擎是一个很棒的软件,但是更新语法绝对是基础的,而且自从SQL-92标准以来它没有被改变的事实确实显示了它的年龄。

票数 4
EN

Stack Overflow用户

发布于 2009-04-24 19:24:08

尝试:

代码语言:javascript
复制
update idet
SET idet.itemDesc = bt.bomItemDesc
from inventoryDetails as idet
     inner join BOM_TEMPLATES as bt
          on bt.bomModelNumber = idet.modelNumber

这就是我为SQL server编写它的方式。希望Access能理解相同的命令。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/787186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档