问题描述
这里是第一次提问。我试图用 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
);