MySQL 根据条件每行更新值行

标签 mysql conditional-statements

我有一个数据库(我正在运行 MySQL 5.7),其中有两个表,其中包含有关机械组件及其库存的数据。要了解其可用性,一个关键组件的可用性至关重要。关键部件的库存在第二个表(属性1)中。

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 字段中为每个程序集手动设置关键组件。我正在寻找一种方法,通过检查 attribute1 中所述项目的 stock 并编写相关的 来更新每个程序集的 stock库存值放入装配线。

到目前为止,我最大的问题是找到一种方法,通过搜索 attribute1 中声明的项目并复制现有的 stock< 来让 UPDATE 逐行更改 值。 由于我使用 MySQL 的经验非常有限,我只找到了一种在检查简单条件(用 attribute1 编写的内容)后使用 UPDATE 更改值的方法:

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

我尝试构建的查询是否完全可行,或者我是否遗漏了某些内容? 到目前为止,我脑子里的代码将再次搜索整个数据库中的每一行。有没有一种更快、更优雅的方式来实现我想要做的事情? 非常感谢任何帮助!

最佳答案

寻找

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);

fiddle

关于MySQL 根据条件每行更新值行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59660363/

相关文章:

c# - 有条件地应用 Where(或在它们之间)LINQ

java - 无法成功重新循环 while 循环

php - mysql根据不同的条件更新不同的列

mysql - 如何在数据库中存储不同的用户配置文件?

mysql - mysql中相同字符3次条件

python - 如何使用小部件选项值作为条件来制作 if 语句?

css - 如何在 smarty 模板引擎中对特定元素使用内联 CSS?

php - 从 MIN(CAST(.. AS DATETIME)) 输出获取值到 php 错误

c# - MySQL ODBC 驱动程序 : SQL works in an editor like workbench but not within . NET odbc

java - java中多个条件的while循环