mysql - 使用 MySql 更新具有子表最强状态的父表

标签 mysql sql-update

使用一对多关系的两个表,我需要用所有子条目的最强状态更新父表。根据 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/

相关文章:

mysql - 在 Phpmyadmin 中更改 Mysql 服务器的端口

php - 使用用户输入过滤查询的最佳方法是什么

html - 使用 Bootstrap 显示 Mysql Group_Concat 结果

mysql - 使用连接表进行 sql 更新

mysql - 具有滚动自连接的 SQL 更新

mysql - 根据其自己的表中的值更新列

mysql - 如何将值随机分配给集合中的字段?

mysql - 更新排序索引列以移动项目

MySQL - 嵌入式选择 - 如何将行放入列中?

mysql - 条件 MySQL 列