用一个表中的数据更新另一个……两表关联的问题请教

yangzhy 2005-10-31 01:27:33
以下情况在ACCESS中怎么写语句?

要是在T-SQL下可以如下写:

update a
set a.money = sum(b.money)
from b
where a.id = b.id

就是假如
a表中有id,money两个字段,存放个人信息
a表中的id是不重复的

b表存放个人发生的业务,也是id,money两个字段,但同一个id可能会有多项

现在需要用b表的sum(money)来更新a表的money字段,关联是a.id = b.id

在网上看到别人说用以下语句:
UPDATE a INNER JOIN b ON a.ID = b.ID SET a.fb = b.fb
但是好象需要要求b表中的id字段唯一,不太适合我的情况

谢谢!
...全文
951 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangzhy 2005-11-01
  • 打赏
  • 举报
回复
问题已解决,感谢wwwwb 的多次关注!
也感谢changechange的指点和你的网站!
wwwwb 2005-11-01
  • 打赏
  • 举报
回复
对了如果我的ID是文本型的,把“b”改成什么呢?
UPDATE a SET money = dsum("money","b","b.id='" & [a].[id] &"'");
yangzhy 2005-10-31
  • 打赏
  • 举报
回复
感谢楼上各位!
changechange,你的网站我去过了,很好,以后会经常去学习的:)

对了如果我的ID是文本型的,把“b”改成什么呢?
changechange 2005-10-31
  • 打赏
  • 举报
回复
两个表用Where子句关联,然后更新为何出错?(操作必须使用一个可更新的查询)


作者:cg1 摘自:access911.net 编辑:cg1 更新日期:2003-7-10 浏览人次:1088

专题地址:
http://access911.net/?kbid;77FAB61E14DC



简述:
总出现“操作必须使用一个可更新的查询”的错误提示,如何解决?


阅读前需掌握:


难度等级:
等级未评定




问题:




1。两个表用Where子句关联,然后更新为何出错?
update a set a.fb=b.fb where a.fa=b.fa


2。共有billlist和B_see两个表。要把B_see中的值写到billlist中
我把前缀去掉了,也还报错.SQL语句如下
update BillList set billList.ProdNewprice=B_see.a ,billList.ProdnewMoney=B_see.b,billList.ProdDiscount=B_see.c
from BillList,B_see
where billList.Id=B_see.Id






回答:




注意:在回答问题前提示大家,应尽量使用ACCESS环境所特有的“域函数”,比如 DLOOKUP DSUM DCOUNT DMAX DMIN 等等,具体的操作方法请查询帮助。
比如:
update a set a.fb=dlookup("fb","b","b.fa=" & a.fa)




这个问题经常发生在从其他中大型数据库开发者转到用 jet db 4 的Access的时候
Access中不允许用where tableA.fieldA = TableB.fieldA 来做update的连接,这是T-sql的语法,在当初教T-sql的时候你们老师应该说过这句语句使用的注意要点吧?
必须把t-sql的语法转成Asni的语法,用 join 来做。

UPDATE a INNER JOIN b ON a.fa = b.fa SET a.fb = b.fb;



另外,b.fb不应该是重复的。即要求是主键或唯一索引。






问题:



想达到此目的,如何修改下面的update语句
update usertabb094 t1 ,(select field_3, sum(field_9) as field_91,sum(field_10 ) as field_101 from usertabb095 group by field_3 ) t2 set t1.field_8=(t1.field_8*t1.field_7+t2.field_101)/(t1.field_7+t2.field_91) where t1.field_1=t2.field_3


上面的语句运行显示:
操作必需使用一个可更新的查询




回答:



必须拆成2个查询才能运行
1、select field_3, sum(field_9) as field_91,sum(field_10 ) as field_101 into [095] from usertabb095 group by field_3


注意:使用套嵌查询就会出现你说的问题,但是使用临时表没问题
2、UPDATE usertabb094 AS t1 INNER JOIN 095 ON t1.field_1=[095].field_3 SET t1.field_8 = (t1.field_8*t1.field_7+[095].field_101)/(t1.field_7+[095].field_91);











changechange 2005-10-31
  • 打赏
  • 举报
回复
UPDATE a SET [money] = dsum("[money]","b","b.id=" & [a].[id]);

changechange 2005-10-31
  • 打赏
  • 举报
回复
关于此主题请参考:
两个表用Where子句关联,然后更新为何出错?(操作必须使用一个可更新的查询)《...
http://access911.net/index.asp?u1=a&u2=77FAB61E14DC
wwwwb 2005-10-31
  • 打赏
  • 举报
回复
假设ID为数字型。
wwwwb 2005-10-31
  • 打赏
  • 举报
回复
try:
UPDATE a SET money = dsum("money","b","b.id=" & [a].[id]);
wwwwb 2005-10-31
  • 打赏
  • 举报
回复
1、拆成2个查询;
2、用域函数 DSUM

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧