Как обновить несколько строк в базе данных MySQL одновременно - PullRequest
0 голосов
/ 01 мая 2020

У меня проблемы с MySQL оператором обновления. Я работаю в Node / Express бэкэнде. Я хочу обновить столбец InventoryQTY в таблице BOOK до значения текущего значения минус значение, которое пользователь имеет в своей корзине при оформлении заказа (в основном, обновление моего инвентаря, когда пользователь покупает книгу). Другая квалификация заключается в том, что обновление должно происходить для каждой книги, которая находится в корзине текущего пользователя. Вот мой запрос:

` 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 строки». Моей первой мыслью было, что запрос возвращает несколько книг, поскольку у пользователя в корзине было три книги. Чтобы проверить, я удалил две книги и все еще получаю сообщение об ошибке. Так что ошибка не в том, что подзапрос возвращает несколько идентификаторов книг. Я также исследовал эту ошибку и обнаружил, что нельзя использовать = для запроса, возвращающего несколько строк; Однако я использую 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 строки», если в корзине более одной книги. Теперь я считаю, что ошибка происходит, потому что подзапрос возвращает несколько идентификаторов книг. Как я могу решить это?

1 Ответ

0 голосов
/ 01 мая 2020

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';
...