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语句分配一

我使用MySQL实现以下功能:我有两个表,
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;