gpt4 book ai didi

mysql - 子查询的优化

转载 作者:行者123 更新时间:2023-11-28 23:13:46 24 4
gpt4 key购买 nike

我有用户和组之间的关系。用户可以在组中,也可以不在组中。

编辑:在模型中添加了一些东西以使其更方便。

enter image description here

假设我有一个规则,考虑到它有一个特定的城镇和自定义元数据(如 18 岁),将用户添加到组中。

目前,我这样做是为了知道我必须将哪些用户添加到居住在巴黎的 18 岁人群中:

        SELECT user.id AS 'id'
FROM user
LEFT JOIN
(
SELECT user_id
FROM user_has_role_group
WHERE role_group_id = 1 -- Group for Paris
)
AS T1
ON user.id = T1.user_id
WHERE
(
user.town = 'Paris' AND JSON_EXTRACT('custom_metadata', '$.age') = 18
)
AND T1.user_id IS NULL

它有效并为我提供了要插入到组中的用户 ID。

但是当我有 50 个组要处理时,比如 50 个城镇或不同年龄段,它迫使我执行 50 个请求,这对我的数据库来说非常慢而且效率不高。

如何为每个组生成结果?

类似的东西:

role_group_id          user_to_add
1 1
1 2
2 1
2 3

目前我知道的唯一方法是像上面那样对多个子查询执行 UNION,但这当然很慢。

请注意,custom_metadata 字段是用户定义的字段。我无法创建特定的列或表。

非常感谢您的帮助。

最佳答案

如果我很理解你:

select user.id, grp.id
from user, role_group grp
where (user.id, grp.id) not in (select user_id, role_group_id from user_has_role_group) and user.town in ('Paris', 'Warsav')

该代码给出了他们不属于某个城镇的用户和组的列表..

关于mysql - 子查询的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com