使用一对多关系的两个表,我需要用所有子条目的最强状态更新父表。根据 Table2 中的条目,Table1 的结果应该是这样的:
+-----------------------+ +-----------------------+
| Table1 | | Table2 |
+-----------------------+ +-----------------------+
| table1_id |status1 | | table1_id |status2 |
+-----------------------+ +-----------------------+
|0 |1 | |0 |1 |
|1 |0 | |0 |1 |
|2 |2 | |1 |0 |
|3 |0 | |1 |2 |
+-----------------------+ |2 |1 |
|2 |2 |
|3 |1 |
|3 |0 |
+-----------------------+
其中 0 最强,1 最弱,2 居中。
我考虑过使用 MIN()
或 MAX()
或什至将每个父项的所有子条目相乘并对大于 2 的任何值使用 2,但是否则保留 0 或 1。不过,用于此的 MySQL 有点超出我的掌握范围。
最佳答案
如果顺序为 0-1-2 会更简单,因为您可以使用单个 min() 函数。这样,您需要在内部稍微调整 min() 函数,为数字 1 赋予不同的权重,并且您需要使用另一个 case 表达式将结果解释回 set 部分:
update table1,
(select table1_id, min(case status2 when 1 then 3 else status2 end) as status2
from table2
group by table1_id) t2
set table1.status1=case t2.status2 when 3 then 1 else status2 end
where table1.table1_id=t2.table1_id
关于mysql - 使用 MySql 更新具有子表最强状态的父表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553840/