目前,我正在尝试实现一个餐厅应用程序。在数据库中我有category
表和item
表,一个类别必须有多个项目,一个项目必须有一个类别,所以这是一个一对多的关系,当一个类别没有任何项目表示项目时,我想要更新一些类别记录如果qty on hand = 0
类别status
应该更新为"deactivated"
这些是我的表
+-------+----------+-------------------+
| 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
,我需要一些帮助。
发布于 2020-04-30 06:38:27
只需在子查询中添加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 ;
发布于 2020-04-30 06:47:35
对于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"
发布于 2020-04-30 06:49:17
尝试如下所示:
UPDATE catagory
INNER JOIN item ON catagory.CatId = item.CatId
SET catagory.`status` = "deactivated"
WHERE COALESCE(SUM(item.QtyOnHand), 0) = 0;
WHERE
子句中的SELECT
没有过滤。此外,还添加了一个COALESCE()
来停用任何没有项目的类别。
https://stackoverflow.com/questions/61517168
复制