我有两张表显示主要角色和次要角色的组件。已知主要角色"包含"次要角色(组件是相同的),但它们没有这样定义。
编辑:一些次要角色部分但不完全代表主要角色。我只想看到所有组件完全匹配的次要角色。下面的MiRoleY就是一个例子。查询应忽略这些,并返回裸组件
示例:
表1:主要角色
MajorRoleName Component
MaRoleA ENTM1
MaRoleA ENTM2
MaRoleA ENTM3
MaRoleA ENTM4
MaRoleA ENTM5
MaRoleA ENTM6
MaRoleA ENTM7
表2次要角色
MinorRoleName Component
MiRoleZ ENTM1
MiRoleZ ENTM2
MiRoleX ENTM3
MiRoleX ENTM4
MiRoleY ENTM5
MiRoleY ENTM6
MiRoleY ENTM8
我想要做的是重新定义主要角色,所以我最终得到:
MajorRoleName Component
MaRoleA MiRoleZ
MaRoleA MiRoleX
MaRoleA ENTM5
MaRoleA ENTM6
MaRoleA ENTM7
我不需要实际更新数据库,此时我只想读取数据(根据它们包含的次要角色获取主要角色的定义)
有没有办法编写一个会显示此问题的查询?
答案 0 :(得分:0)
这会达到你想要的效果吗?
select distinct majorrolename, minorrolename
from majorroles join
minorroles
on majorroles.component = minorroles.component;
答案 1 :(得分:0)
试试这个:
select distinct
majorrolename,
nz(minorrolename, majorroles.component) as component
from
majorroles
left join (
select * from minorroles as m1
where not exists (
select * from MinorRoles m2
where m2.MinorRoleName = m1.MinorRoleName
and m2.Component not in (select Component from MajorRoles)
)
) a on majorroles.component = a.component
order by 2 desc;
这会给你一个结果:
majorrolename component
MaRoleA MiRoleZ
MaRoleA MiRoleX
MaRoleA ENTM7
MaRoleA ENTM6
MaRoleA ENTM5
(使用Access 2010测试)