MYSQL怎么实现两个表相减 求这样的SQL语句

A表 有物料编号,物料名称,数量字段,指仓库现有的库存。
B表有物料编号,物料名称,退货数量,指退货表。
现在我想A表的数量减去B表的退货数量得A表 的数量。。其实就是更新A表的数量。但是B表的退货数量是未知变量。
求这样的SQL 我用的是MYSQL2000 谢谢
有人能帮我解决吗

第1个回答  2012-11-19
UPDATE
A
SET
A.数量 = A.数量 - B.退货数量
FROM
A JOIN B
ON (A.物料编号 = B.物料编号);

上面这种2表关联更新写法
对于 A 表 与 B 表, 是 1对1 的情况下, 是没有问题的。
对于 A 表与 B 表, 是 1对多的情况下, 就没有测试过了。追问

不行,都是有错误提示‘对象名无效’

追答

CREATE FUNCTION GetNum ( @ItemCode VARCHAR(10) )
RETURNS INT
AS
DECLARE @result INT;
BEGIN
SELECT @result = SUM(退货数量) FROM B WHERE 物料编号 = @ItemCode ;
IF @result IS NULL
BEGIN
SET @result = 0;
END;
RETURN @result;
END;

UPDATE
A
SET
A.数量 = A.数量 - GetNum( A.物料编号 );

追问

这个是存储过程?

追答

不是 存储过程
是 函数

如果更新语句执行失败, 有可能要修改为

UPDATE
A
SET
A.数量 = A.数量 - dbo.GetNum( A.物料编号 );

第2个回答  2012-11-19
把两张表通过物料编号(反正两张表的连接字段)连接起来,这样的话数量字段和退货数量字段相当于在一个表中,接下来减法
第3个回答  2012-11-19
有mysql2000吗? 还是SQL Server 2000?
呵呵,不管了。如果是SQL Server,运行下面的命令就没错。MySQL的话,也可以试了,大差不差吧。

update a
set a.数量=a.数量-b.退货数量
from a,b
where a.物料编号=b.物料编号追问

错误提示“对象名 a 无效 ”
“对象名 b 无效 ”
我是在SQL查询分析器里做验证的,最后才写进程序里。。。在线等!!

第4个回答  2012-11-19
也许要建一个触发器才能实现。追问

怎么建??

第5个回答  2012-11-19
上面的update 完全正确,可以用本回答被提问者采纳
相似回答