看来这个问题应该被编辑
如果我能很好地理解你的话:
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')
该代码给出了他们不属于某个城镇的用户和组的列表..
要将缺少的条目添加到 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;