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