查询是不是存在多个多对多关系

Posted

技术标签:

【中文标题】查询是不是存在多个多对多关系【英文标题】:Query for existence of multiple many-to-many relationships查询是否存在多个多对多关系 【发布时间】:2019-03-07 19:50:10 【问题描述】:

我有一个基本的 sql 问题。我通过联结表建立了多对多的关系。通过 EmployeeRoles 向角色说员工

Table: EMPLOYEES
Columns: id, name, etc.

Table: ROLES
Columns: id, name

Table: EMPLOYEES_ROLES
Columns: employee_id, role_id

如何查询具有两个角色(例如管理员和主管)的员工? Hibernate 中的奖励积分。

【问题讨论】:

【参考方案1】:

你可以试试下面-

select a.emp_id,b.name from employee_roles a
inner join EMPLOYEES b on a.emp_id=b.id
inner join roles c on a.role_id=c.id
where c.name in ('Admin' ,'Supervisor') and not exists 
     (select 1 from employee_roles a1
             inner join EMPLOYEES b1 on a1.emp_id=b1.id
             inner join roles c1 on a1.role_id=c1.id
             where a.emp_id=a1.emp_id and c1.name='Trainee')
group by a.emp_id,b.name
having count(distinct c.name)=2

【讨论】:

好的,奖励积分,例如,我将如何查询具有“管理员”和“主管”角色但又没有“实习生”角色的人。【参考方案2】:

如果您不需要知道员工具有哪些特定角色,您甚至不需要访问角色表;只需获取employee_roles 中有多个记录的employee_id 编号列表,并将这些employee_id 值加入员工:

select e.name, count(x.role_id) as num_roles
from employee_roles x
join employees e
on (e.id = x.employee_id)
having count(x.role_id) >= 2;

【讨论】:

在这种情况下,我确实需要知道他们拥有哪些角色,而不仅仅是他们拥有多个角色。

以上是关于查询是不是存在多个多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

多对多查询的 Django 模型文件更新

通过 SQLAlchemy 选择多个多对多关系

mybatis11--多对多关联查询

Mysql连接查询匹配所有标签的多个“标签”(多对多关系)?

Mybatis的多表(多对多)查询

MS Access:对多个表的交叉表查询(多对多关系)