Mysql 从内部联接特定ID更新,但所有ID均已更新

Mysql 从内部联接特定ID更新,但所有ID均已更新,mysql,inner-join,Mysql,Inner Join,目前,我正在尝试实现一个餐馆应用程序。在DB I中有类别表和项目表,一个类别必须有多个项目,一个项目必须有一个类别,因此这是一对多关系,当一个类别没有任何表示物品的物品时,我想更新一些类别记录,如果现存量=0类别状态应更新为“停用”,这些是我的表格 +-------+----------+-------------------+ | CatId | status | catagory | +-------+----------+-------------------+ |

目前,我正在尝试实现一个餐馆应用程序。在DB I中有
类别
表和
项目
表,一个类别必须有多个项目,一个项目必须有一个类别,因此这是一对多关系,当一个类别没有任何表示物品的物品时,我想更新一些类别记录,如果
现存量=0
类别
状态应更新为
“停用”
,这些是我的表格

+-------+----------+-------------------+
| CatId | status   | catagory          |
+-------+----------+-------------------+
| C001  | Deactive | SeaFood           |
| C002  | Deactive | ITALIAN & western |
| C003  | Active   | Kottu             |
| C004  | Active   | Rice              |
+-------+----------+-------------------+


+--------+-------+--------+-----------+-----------------+------------+----------+
| ItemId | CatId | Price  | QtyOnHand | iteamName       | Date       | Time     |
+--------+-------+--------+-----------+-----------------+------------+----------+
| I001   | C003  | 650.00 |        30 | chease kottu    | 2020-04-26 | 19:55:59 |
| I002   | C003  | 650.00 |        25 | vgetable kottu  | 2020-04-26 | 19:55:59 |
| I003   | C003  | 450.00 |         3 | chicken koththu | 2020-04-27 | 08:32:12 |
+--------+-------+--------+-----------+-----------------+------------+----------+
这是我到目前为止尝试的查询

UPDATE catagory  INNER JOIN item  ON catagory.CatId = item.CatId SET catagory.`status` = "deactivated"
WHERE ((SELECT SUM(item.QtyOnHand)) >= 0);
此查询更新项目表中包含的所有类别
CatId

作为初学者,对于
MySQL
,我需要一些帮助。

只需在子查询中添加
where
子句,并根据需要对其进行过滤即可。 像这样

UPDATE catagory INNER JOIN item ON catagory.CatId  = item.CatId 
SET catagory.status ="deactivated"
WHERE (SELECT SUM(item.QtyOnHand) where catagory.CatId  = item.CatId GROUP By item.CatId) <= 0 ; 
更新catagory.CatId=item.CatId上的catagory内部联接项
设置类别。状态=“已停用”

其中(选择SUM(item.QtyOnHand),其中catagory.CatId=item.CatId GROUP By item.CatId)对于SUM=0的CatId,可以在子查询中使用update with join

    update catagory
    inner join  (
         select catagory.CatId,   SUM(ifnull(item.QtyOnHand,0)) tot
         from catagory 
         left join item ON item.CatId = catagory.CatId
         group by catagory.CatId
         having SUM(ifnull(item.QtyOnHand,0)) = 0
    ) t on t.CatId = catagory.CatId 
    set catagory.`status` = "deactivated"

试着这样做:

UPDATE catagory
  INNER JOIN item  ON catagory.CatId = item.CatId
  SET catagory.`status` = "deactivated"
  WHERE COALESCE(SUM(item.QtyOnHand), 0) = 0;

您的
SELECT
WHERE
子句中没有筛选。此外,还添加了一个<代码> CueSeCe()/<代码>去激活任何没有条目的类别。

在该条件下有“<代码> > 0”/代码>,这与“手上的QTY=0”不一样……我也尝试过,作为<代码> < 0 >代码>,但是考虑是否容易存储容易导出的数据。