【问题标题】:How to update multiple rows in MySQL database at once如何一次更新MySQL数据库中的多行
【发布时间】: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


【解决方案1】:

UPDATE Book
    SET UPDATE table_users
SET InventoryQty = (case when user_role = 'student' then '622057'
                         when user_role = 'assistant' then '2913659'
                         when user_role = 'admin' then '6160230'
                    end),
        date = '12082014'
    WHERE user_role in ('student', 'assistant', 'admin') AND
          cod_office = '17389551';

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2012-03-16
    • 2017-05-09
    相关资源
    最近更新 更多