子查询的优化

问题描述 投票:0回答:2

看来这个问题应该被编辑

mysql sql
2个回答
1
投票

如果我能很好地理解你的话:

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')

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


0
投票

要将缺少的条目添加到 user_has_role_group,您可能需要在这些城镇名称与其 group_id 之间建立一些映射。

下面的示例只是使用带有联合的子查询。
但您可以用表格中的选择来替换它。
甚至可能来自 role_group,如果这些名称与用户城镇名称相关。

insert into user_has_role_group (user_id, group_id)
select u.user_id, g.group_id
from user u
join (
  select 'Paris' as name, 1 as group_id union all
  select 'Rome', 2
  -- add more towns here
) g on (u.town = g.name)
left join user_has_role_group ug 
  on (ug.user_id = u.user_id and ug.role_group_id = g.group_id)
where u.town in ('Paris','Rome') -- add more towns here
  and json_extract(u.custom_metadata, '$.age') = 18
  and ug.id is null;
© www.soinside.com 2019 - 2024. All rights reserved.