Mysql 基于其他表中排名最低的属性更新表中的属性
我使用MySQL实现以下功能:我有两个表,Mysql 基于其他表中排名最低的属性更新表中的属性,mysql,triggers,Mysql,Triggers,我使用MySQL实现以下功能:我有两个表,sw\u products和sw\u components。每个sw\u产品可以由多个sw\u组件组成。还有另一个关系表,其中每一行指定产品及其使用的组件 每个sw_组件都有一个状态:“就绪”、“未就绪”和“不可用”。每个sw_产品也有一个对应于其所有组件最低状态的状态 我所做的是在sw\u组件更新时创建一个触发器更新,但随后我需要遍历所有使用该sw\u组件的sw\u产品,并在新状态更高时更改其状态。我怎么能在扳机里做到这一点?(给select语句分配一
sw\u products
和sw\u components
。每个sw\u产品
可以由多个sw\u组件组成
。还有另一个关系表,其中每一行指定产品及其使用的组件
每个sw_组件都有一个状态:“就绪”、“未就绪”和“不可用”。每个sw_产品
也有一个对应于其所有组件最低状态的状态
我所做的是在sw\u组件
更新时创建一个触发器更新,但随后我需要遍历所有使用该sw\u组件的sw\u产品
,并在新状态更高时更改其状态。我怎么能在扳机里做到这一点?(给select语句分配一个变量,并循环遍历每一行,可能吗?)
谢谢 我是OP。经过一番思考,我终于解决了这个问题。正如Ultimater所说,您可以使用游标,但它们是只读的,因此您可能会遇到一些麻烦,我认为它们过于复杂了(但还是要感谢!)
我所做的是将状态从VARCHAR更改为整数,然后我创建了每个产品的视图以及它们的最低状态(使用MIN(状态):
然后,每次更新组件状态时,我都会使用触发器。我发现即使触发器不属于不相关的表,也会更新这些表,并且可以在更新中联接表:
UPDATE sw_products a
LEFT JOIN product_status_by_component b ON
a.name = b.s_name AND a.version = b.s_version
SET
a.status = b.min;
你可以在触发器内使用光标,完成任务!!!
UPDATE sw_products a
LEFT JOIN product_status_by_component b ON
a.name = b.s_name AND a.version = b.s_version
SET
a.status = b.min;