sql查询role_menu表不同角色的共同菜单
时间: 2024-02-06 09:03:27 浏览: 79
可以使用以下SQL语句查询role_menu表不同角色的共同菜单:
```
SELECT menu_id, COUNT(*) AS num_roles
FROM role_menu
GROUP BY menu_id
HAVING num_roles > 1;
```
该语句会对role_menu表按照menu_id进行分组,并统计每个分组中的角色数。然后,使用HAVING子句过滤出角色数大于1的分组,即为不同角色的共同菜单。
相关问题
oracle使用sql查询role_menu表中有共同菜单的是哪些角色,共同菜单有哪些
你好!针对你的问题,可以使用以下SQL语句查询role_menu表中有共同菜单的角色以及共同菜单:
```
SELECT rm1.role_id,rm2.role_id,rm1.menu_id
FROM role_menu rm1
JOIN role_menu rm2 ON rm1.menu_id=rm2.menu_id AND rm1.role_id < rm2.role_id
ORDER BY rm1.menu_id, rm1.role_id, rm2.role_id
```
其中,rm1和rm2分别代表role_menu表的两个实例,rm1.menu_id=rm2.menu_id表示两个实例的menu_id相等,rm1.role_id < rm2.role_id表示查询不重复的角色组合。最后,按照menu_id、role_id1、role_id2的顺序排序。
执行以上查询语句后,会返回一个结果集,其中每一行代表一组有共同菜单的角色,第一列代表第一个角色的ID,第二列代表第二个角色的ID,第三列代表共同菜单的ID。
oracle使用sql查询role_menu表中有共同菜单的是哪些角色,共同菜单有哪些,结果集为role_ids,menu_ids
您可以使用以下 SQL 查询语句来实现:
```
SELECT
listagg(rm1.role_id, ',') WITHIN GROUP (ORDER BY rm1.role_id) AS role_ids,
listagg(rm1.menu_id, ',') WITHIN GROUP (ORDER BY rm1.menu_id) AS menu_ids
FROM
role_menu rm1
JOIN role_menu rm2 ON rm1.menu_id = rm2.menu_id AND rm1.role_id <> rm2.role_id
GROUP BY
rm1.menu_id
```
这个查询语句会返回所有有共同菜单的角色以及它们所共享的菜单ID列表。其中,`role_ids` 列是逗号分隔的角色ID列表,`menu_ids` 列是逗号分隔的共同菜单ID列表。
阅读全文