我在这里乱用SQLite语法有点麻烦,如果有人能指出我走在正确的道路上,我会很高兴。
基本上:我试图根据另一个表(Items.Qty)中字段的总和更新一个表(MasterItems.InStock)中的布尔字段,具体取决于Items表中Qty的总和是> 0或不。
我可以先用两个陈述来做到这一点:
UPDATE MasterItems
SET InStock = 0 WHERE InStock <> 0;
UPDATE MasterItems
SET InStock = 1
WHERE ProductNumber IN
(SELECT ProductNumber FROM Items
GROUP BY Items
HAVING SUM(Qty)> 0);
但我知道必须有一种方法可以在一个声明中做到这一点......
答案 0 :(得分:0)
布尔表达式(例如“x > 0
”)返回0或1,因此您可以直接使用它。
要使用单个值更新每一行,请使用correlated subquery。要在项目没有行时获得零,请将NULL替换为ifnull():
UPDATE MasterItems
SET InStock = (SELECT IFNULL(SUM(Qty), 0)
FROM Items
WHERE ProductNumber = MasterItems.ProductNumber
) > 0;