基于另一个字段的和更新SQLite布尔字段

时间:2015-12-04 22:35:03

标签: sqlite

我在这里乱用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);

但我知道必须有一种方法可以在一个声明中做到这一点......

1 个答案:

答案 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;