【发布时间】:2020-03-22 16:48:03
【问题描述】:
employee表包含empCode (fk), empName etc
角色表包含roleCode (fk), roleName etc
employeeRoleMap表包含Many-To-Many of both (id, empCode, roleCode, isPrimaryRole etc)的数据
一个员工可以有多个角色,其中只有一个主要角色 (isPrimary = 1)
要显示员工详细信息和主要角色,我需要处理 employee 和 employeeRoleMap 表
所以,查询
select em.empCode, em.empName, em.roleCode
FROM employee em
left join employeeRoleMap erm
on (em.empCode=erm.empCode AND erm.isPrimary=1)
对于哪个主要角色不存在,它将显示为空。好的。
但是,现在我想要添加角色详细信息字段,例如角色名称。
所以,我尝试了cross-join
select em.empCode, em.empName, em.roleCode
FROM employee em
LEFT JOIN employeeRoleMap erm
on (em.empCode=erm.empCode AND erm.isPrimary=1)
CROSS JOIN role r
WHERE em.roleCode = r.roleCode
它适用于拥有 roleCode 的人,对于拥有 null 作为主要角色代码的员工,这些行将被忽略。
但是,它不应该是这种情况,因为员工是左外连接,即使角色代码存在与否,它也应该显示
【问题讨论】:
标签: sql sql-server join