临时表和历史记录表之间的左连接将给出乘法结果



我有一个存储过程,它检索所有员工的角色,称为GetAllRoles。 我将从此存储过程生成的数据插入到临时表中,如下所示:

临时表的创建 #RoleTemp:

CREATE TABLE #RoleTemp (
EmployeeId INT ,
EmployeeRoleId  int,
EntityRoleId int, 
ValueId int , 
[RoleLabel] VARCHAR(255), 
SecurityIdentifier VARCHAR(250) , 
[Role] NVARCHAR(MAX), 
RoleAccess  VARCHAR(255)
)

人口 #RoleTemp 表:

INSERT INTO #RoleTemp 
EXEC GetAllEmployeeRoles

我想加入 #RoleTemp 和Employee_RoleHistory表,如下所示:

SELECT rt.EmployeeId,erh.RoleId,erh.CreatedDate AS StartDate,erh.RemovedDate AS EndDate FROM #RoleTemp rt
LEFT JOIN Employee_RoleHistory erh ON rt.EntityRoleId=erh.RoleId
WHERE rt.EmployeeId=5625

而不是为每个角色获取开始日期和结束日期:

EmployeeId  RoleId  StartDate                           EndDate 
5625        23      2016-07-12 11:12:33.4900000 6973    2019-01-07 10:29:25.3900000     
5625        25      2019-07-12 11:12:33.4900000 6973    NULL    
5625        233     2018-09-23 11:12:33.4900000 6973    NULL    
...         ...     ...                                 ...

我得到的结果是每个角色重复多次,如下所示:

EmployeeId  RoleId  StartDate                           EndDate 
5625        23      2016-07-12 11:12:33.4900000 6973    NULL        
5625        23      2016-07-12 11:12:33.4900000 6973    NULL    
5625        23      2016-07-12 11:12:33.4900000 6973    NULL    
...         ...     ...                                 ...

尝试了解表与重复的真正原因的关系,并通过添加适当的ON条件来背诵它。

如果没有任何效果,那就去DISTINCT

使用DISTINCT条款

SELECT DISTINCT rt.EmployeeId, erh.RoleId, erh.CreatedDate AS StartDate,erh.RemovedDate AS EndDate 
FROM #RoleTemp rt LEFT JOIN Employee_RoleHistory erh ON rt.EntityRoleId=erh.RoleId
WHERE rt.EmployeeId = 5625

最新更新