SELECT and JOIN仅返回每位员工一行

问题描述 投票:0回答:2

我有一个用户表,用于存储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
)

但是再次返回所有可能的行。

是否有办法使它正常工作?

sql sql-server sql-server-2012 sql-server-2014
2个回答
0
投票

使用子查询代替联接:

select *
  , (select top 1 E.EmailAddress from EmplyeeEmail E where E.employeeId = I.employeeId)
from EmployeeInfo I
where I.hireDate = 2015;

0
投票

这应该有效。

SELECT *
FROM EmployeeInfo
Left JOIN EmployeeEmail
  ON EmployeeInfo.employeeId = EmployeeEmail.employeeId
WHERE EmployeeInfo.hireDate = '2015'
GROUP BY EmployeeInfo.employeeId;
© www.soinside.com 2019 - 2024. All rights reserved.