Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

这段SQL UPDATE语句错在哪儿请高人指正

清风徐来  发表于:2016-04-18 17:29:04  
复制

下面这段UPDATE语句想用来将已撤销配送的配送数量退还库存,需要将该数量加回到库存ID相同的那条记录的剩余库存数量中:

UPDATE 库存表

SET 库存表.库存数量=库存表.库存数量+配送表.配送数量

FROM 库存表

INNER JOIN 配送表 ON 配送表.库存ID=库存表.库存ID

WHERE (((配送表.已撤销配送)=True));

运行报错:语法错误(操作符丢失),在查询表达式'库存表.库存数量+配送表.配送数量 FROM 库存表 INNER JOIN 配送表 ON 配送表.库存ID=库存表.库存ID'中,

请教各位高人应该如何改,或者怎样写SQL语句才能达到我的目标?

叩谢!

 

Top
朱先生 发表于:2016-04-18 18:36:26

UPDATE 库存表 ,配送表

SET 库存表.库存数量=库存表.库存数量+配送表.配送数量

FROM 库存表

 WHERE  配送表.库存ID=库存表.库存ID  AND

配送表.已撤销配送=True;

试试



清风徐来 发表于:2016-04-19 09:19:46

朱先生好!运行您改的SQL语句仍然报错:语法错误(操作符丢失),在'库存表.库存数量+配送表.配送数量 FROM 库存表'中。

另外,您写“UPDATE 库存表 ,配送表”是要同时更新库存表和配送表吗?如果是这样,后边为何又没有相应的SET内容呢?我想这里不该有配送表吧。

对于配送表,用户的要求是保留已撤销配送的记录使其可以反映配送历史,但要给这些记录加上“已撤销配送”的标注,所以配送表的更新只是加标注,我就给它加上了一个“已撤销配送”的真假字段。现在的难点在于更新库存表,把撤销的配送数量按原库存ID退还(加回到原来那条库存记录的库存数量中)。麻烦您再助我攻关,谢谢!



朱先生 发表于:2016-04-19 11:52:44

UPDATE 库存表 ,配送表

SET 库存表.库存数量=库存表.库存数量+配送表.配送数量

 WHERE  配送表.库存ID=库存表.库存ID  AND

配送表.已撤销配送=True;



清风徐来 发表于:2016-04-19 15:08:19

OK啦!原来是不能有FROM 库存表。但是我不明白为什么,我看好多关于UPDATE语句的介绍有这种语法的。另外,我在网格视图里将两表的ID字段关联后,生成了下面的SQL语句,也能成功运行:

UPDATE 指标库存表 INNER JOIN 指标分配表 ON 指标库存表.库存ID = 指标分配表.库存ID SET 指标库存表.库存数量 = 指标库存表.库存数量+指标分配表.分配数量
WHERE (((指标分配表.库存ID)=[指标库存表].[库存ID]) AND ((指标分配表.已撤销分配)=True));




朱先生 发表于:2016-04-19 16:10:41

方法不是唯一的

共同点是不用FROM



总记录:5篇  页次:1/1 9 1 :