我有一个用户表,用于存储employeeId,lastName,firstName,部门,雇用日期和mostRecentLogin。
我还有另一个表存储employeeId,emailAddress。
电子邮件地址表可以为员工提供多行,如果他们有多个电子邮件地址。
我正在尝试返回仅对每位员工显示一行的结果。我不在乎哪个电子邮件地址,只要它只选择一个即可。
但是我尝试过的所有查询总是返回所有可能的行。
这是我最近的尝试:
select *
from EmployeeInfo i
left join EmployeeEmail e ON i.employeeId = e.employeeId
where i.hireDate = 2015
and employeeId IN (
SELECT MIN(employeeId)
FROM EmployeeInfo
GROUP BY employeeId
)
但是再次返回所有可能的行。
是否有办法使它正常工作?
使用子查询代替联接:
select *
, (select top 1 E.EmailAddress from EmplyeeEmail E where E.employeeId = I.employeeId)
from EmployeeInfo I
where I.hireDate = 2015;
这应该有效。
SELECT *
FROM EmployeeInfo
Left JOIN EmployeeEmail
ON EmployeeInfo.employeeId = EmployeeEmail.employeeId
WHERE EmployeeInfo.hireDate = '2015'
GROUP BY EmployeeInfo.employeeId;