【发布时间】:2020-05-01 09:15:46
【问题描述】:
我在使用 MySQL 更新语句时遇到问题。我在 Node/Express 后端工作。我想将 BOOK 表中的 InventoryQTY 列更新为当前值减去用户结帐时购物车中的值(基本上是在用户购买书籍时更新我的库存)。另一个条件是更新应该针对当前用户购物车中的每本书进行。这是我的查询:
` UPDATE BOOK
SET InventoryQTY =(BOOK.InventoryQTY - (SELECT Quantity FROM SHOPPING_CART_ITEM))
WHERE BOOK.BookID IN
(SELECT BookID FROM SHOPPING_CART_ITEM WHERE CartID IN
(SELECT CartID FROM SHOPPING_CART WHERE CustomerID = '${userID}'))`;
我当前的错误是这样的:“子查询返回超过 1 行”。我的第一个想法是查询返回了多本书,因为用户的购物车中有三本书。为了测试,我删除了两本书,但仍然出现错误。所以错误不是因为子查询返回了多个书籍 ID。我还研究了该错误,发现您不能将 = 用于返回多行的查询;但是,我正在使用 IN 所以这也不是问题。请帮忙!我很困惑!!!!
编辑*** 我稍微改变了我的查询:
` UPDATE BOOK
SET InventoryQTY =(BOOK.InventoryQTY - (SELECT Quantity FROM SHOPPING_CART_ITEM WHERE CartID IN (SELECT CartID FROM SHOPPING_CART WHERE CustomerID = '${userID}')))
WHERE BOOK.BookID IN
(SELECT BookID FROM SHOPPING_CART_ITEM WHERE CartID IN
(SELECT CartID FROM SHOPPING_CART WHERE CustomerID = '${userID}'))`;
如果用户的购物车中只有一本书,这将消除错误。但是,如果购物车中有不止一本书,我会得到相同的“子查询返回超过 1 行”错误。我现在认为发生错误是因为子查询返回多个书籍 ID。我该如何解决这个问题?
【问题讨论】:
-
我认为这个查询返回超过 1 行
SELECT Quantity FROM SHOPPING_CART_ITEM) -
您是否在 Node Backend 中使用
mysql模块来执行数据库操作?如果是,您可能正在寻找这个:stackoverflow.com/questions/25552115/… -
你试过case了吗?我认为最好使用多个操作
标签: javascript mysql node.js express sql-update