SQL:从另一个表中减去一个表中的值

问题描述

这里是第一次提问。我试图用 SS_Products 中的数量减去表 EXPOS.INV 中的库存。这是我试过的代码

UPDATE SS_products SS 
SET SS.nb_stock = (SELECT SS.nb_stock - EX.Qty 
                   FROM EXPOS_INV EX
                   WHERE  SS.product_code = EX.Barcode)

代码有效,它更新了 nb_stock 行在 2 个表之间匹配的位置,但每隔一行将其清空。

我尝试添加内部联接:

UPDATE SS_products SS 
SET SS.nb_stock = (SELECT SS.nb_stock - EX.Qty 
                   FROM EXPOS_INV EX
                   WHERE SS.product_code = EX.Barcode)
INNER JOIN EXPOS_INV ON SS_products.product_code = EXPOS_INV.Barcode

这个没有通过。我也尝试过使用 WHERE,但它不需要 EXPOS_INV

中的任何子句

根据回答,我尝试了 Where Exists,但它返回了一堆不相关行的截断消息。

我按照一个基本示例的评论,我想出了这段代码

UPDATE 
    SS_products
SET 
    SS_products.nb_stock = (Select SS.nb_stock - EX.Qty from EXPOS_INV EX
                   Where SS.product_code = EX.Barcode)
FROM 
    SS_products
    INNER JOIN EXPOS_INV ON SS_products.product_code = EXPOS_INV.Barcode
Where
    SS_products.product_code = EXPOS_INV.Barcode

这会返回一个语法错误

解决方法

如果匹配的行存在,您可以使用 where 检查:

UPDATE SS_products SS 
    SET SS.nb_stock = (Select SS.nb_stock - EX.Qty
                       from EXPOS_INV EX
                       Where SS.product_code = EX.Barcode
                      )
    WHERE EXISTS (Select SS.nb_stock - EX.Qty
                  from EXPOS_INV EX
                  Where SS.product_code = EX.Barcode
                 );