Обновление из INNER JOIN специфицирует c идентификаторы, но все они были обновлены - PullRequest
3 голосов
/ 30 апреля 2020

В настоящее время я пытаюсь реализовать приложение для ресторана. В БД у меня есть 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 мне нужна помощь.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2020

просто добавьте предложение 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 ; 
1 голос
/ 30 апреля 2020

вы можете использовать обновление с присоединением к подкаталогу для catid с суммой = 0

    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"
0 голосов
/ 30 апреля 2020

Попробуйте что-то вроде этого:

UPDATE catagory
  INNER JOIN item  ON catagory.CatId = item.CatId
  SET catagory.`status` = "deactivated"
  WHERE COALESCE(SUM(item.QtyOnHand), 0) = 0;

Ваш SELECT в предложении WHERE не имеет фильтрации. Также был добавлен COALESCE() для деактивации любой категории, в которой также нет элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...