sql-server - 临时表和历史表之间的左连接给出了相乘的结果
问题描述
我有一个存储过程,它检索所有员工的角色,称为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
而不是为每个角色获取 StartDate 和 EndDate :
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