我有 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 中做这样的事情?希望我的解释足够清楚。
答案 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;