根据其他表的值更新表

时间:2021-05-08 07:50:24

标签: mysql sql

我有 2 个表,我将它们称为 GROUPITEMS 和 ITEMS,如下所示:

GROUPITEMS

ID  |  PRIORITY_MIN  |  PRIORITY_MAX

ITEMS

ID  |  ID_GROUP  |  PRIORITY

我正在寻找的是更新 GroupItems "PRIORITY_MIN" 和 "PRIORITY_MAX" 的请求,检查内部每个项目的优先级,类似这样:

UPDATE GROUPITEMS SET PRIORITY_MIN = MIN (ITEMS.PRIORITY WHERE ID_GROUP = GROUPITEMS.ID),
PRIORITY_MAX = MAX (ITEMS.PRIORITY WHERE ID_GROUP = GROUPITEMS.ID) WHERE GROUPITEMS.ID=myGroupId;

有没有可能在 MySQL 中做这样的事情?希望我的解释足够清楚。

1 个答案:

答案 0 :(得分:1)

你快到了。您可以使用子查询来做到这一点,如下所示:

UPDATE GROUPITEMS 
SET PRIORITY_MIN = (select min(PRIORITY) from ITEMS WHERE ID_GROUP = GROUPITEMS.ID),
PRIORITY_MAX = (select max(PRIORITY) from ITEMS WHERE ID_GROUP = GROUPITEMS.ID);

使用连接: 您还可以通过将任何表与其他表连接来更新任何表。在这种情况下,我将表 groupitems 与一个子查询连接起来,该子查询从每个组的项目表中计算最大和最小优先级。

select id_group,min(priority) minpriority ,max(priority)maxpriority from  items
    group by id_group

然后通过加入,我从这个结果集中选择了 minpriority 和 maxpriority 来更新 groupitems 表的 priority_min 和 priority_max,方法是用 t.id_group=groupitems.id 条件加入它们。

update groupitems
inner join 
(select id_group,min(priority) minpriority ,max(priority)maxpriority from  items
group by id_group)t
on t.id_group=groupitems.id
set priority_min= t.minpriority , priority_max=t.maxpriority;