首页 > 解决方案 > MySQL 根据条件每行更新值行

问题描述

我有一个数据库(我正在运行 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。我正在寻找一种通过检查中所述的项目并将相关值写入程序集的行来更新stock每个程序集的方法。stockattribute1stock

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

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

我正在尝试构建的查询是可行的还是我遗漏了什么?到目前为止,我脑海中的代码将再次搜索整个数据库的每一行。有没有更快、更优雅的方式来实现我想要做的事情?非常感谢任何帮助!

标签: mysqlconditional-statements

解决方案


寻找

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

小提琴


推荐阅读