MySQL Обновление строки значения в строке в зависимости от условия - PullRequest
0 голосов
/ 09 января 2020

У меня есть БД (у меня работает MySQL 5.7) с двумя таблицами, содержащими данные о механических сборках и их инвентаризации. Чтобы знать об их доступности, наличие одного ключевого компонента имеет решающее значение. Запас ключевого компонента находится во второй таблице (attribute1).

Table: assemblies_details
id   name       stock 
1    assembly1  ?
2    assembly2  ?
3    item1      1
4    item2      2

Table: assemblies_attributes
id   name       attribute1
1    assembly1  item1
2    assembly2  item2
3    item1      
4    item2      

Запас товаров обновляется автоматически. На данный момент ключевой компонент устанавливается вручную для каждой сборки в поле attribute1. Я ищу способ обновить stock для каждой сборки, проверив stock элемента, указанного в attribute1, и записав соответствующее значение stock в строку сборки.

Итак На данный момент моей самой большой проблемой является поиск способа изменения строки UPDATE строка за строкой путем поиска указанного элемента attribute1 и копирования существующего значения stock. Поскольку мой опыт работы с MySQL очень ограничен, я нашел способ использовать UPDATE для изменения значений после проверки простого условия (что-то написанное в attribute1):

UPDATE assemblies_details
SET attribute1 = CASE
  WHEN LENGTH(assemblies_details.attribute1) > 0 THEN ???
  ELSE NULL
END

Является ли запрос я пытаюсь построить выполнимо или я что-то упустил? До сих пор код, который у меня в голове, снова и снова просматривал всю базу данных по каждой строке. Есть ли более быстрый и элегантный способ понять, что я пытаюсь сделать? Любая помощь высоко ценится!

1 Ответ

1 голос
/ 09 января 2020

Ищите

UPDATE assemblies_details ad
  JOIN assemblies_attributes aa ON ad.name = aa.name
  JOIN assemblies_details ad2 ON aa.attribute1 = ad2.name
SET ad.stock = COALESCE(ad.stock, ad2.stock);

скрипка

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