oracle使用sql查询role_menu表中有共同菜单的是哪些角色,共同菜单有哪些
时间: 2024-02-25 19:51:41 浏览: 86
你好!针对你的问题,可以使用以下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列表。
oracle使用sql查询role_menu表中有共同菜单的是哪些角色,共同菜单有哪些,结果集为role_ids,menu_id两列,role_ids拥有这个菜单的角色,menu_id为共有的菜单
可以使用以下 SQL 查询语句来查询具有共同菜单的角色及共同菜单:
```
SELECT rm1.role_ids, rm1.menu_id
FROM role_menu rm1
INNER JOIN role_menu rm2 ON rm1.menu_id = rm2.menu_id AND rm1.role_ids <> rm2.role_ids
GROUP BY rm1.role_ids, rm1.menu_id
HAVING COUNT(*) > 1
```
解释一下查询语句:
- 第一行:选择要返回的列,即角色 ID 和菜单 ID。
- 第二行:从 role_menu 表中选择数据。
- 第三行:使用 INNER JOIN 连接 role_menu 表自身,根据 menu_id 相等且 role_ids 不相等的条件进行连接,这样可以获取具有相同菜单的角色。
- 第四行:使用 GROUP BY 分组,根据角色和菜单 ID 进行分组。
- 第五行:使用 HAVING 限制结果集,只返回具有相同菜单的角色。
- 最后一行:结束语句。
这个查询语句将返回具有共同菜单的角色及共同菜单。
阅读全文