SELECT 和加入到 return 每个员工只有一行

SELECT and JOIN to return only one row for each employee

我有一个用户 table 存储了 employeeId、lastName、firstName、部门、雇用日期和 mostRecentLogin。

我有另一个 table 存储 employeeId、emailAddress。

如果员工有多个电子邮件地址,emailAddress table 可以有多行。

我正在尝试 return 结果只为每位员工显示一行。我不在乎哪个电子邮件地址,只要它只选择一个即可。

但我尝试过的所有查询总是 return 所有可能的行。

这是我最近的尝试:

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
)

不过话又说回来,这 return 是所有可能的行。

有没有办法让它工作?

使用子查询而不是连接:

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

注意:如果您改变主意并决定对返回哪个电子邮件地址有偏好,那么只需在子查询中添加一个 order by - 否则您将不知道要返回哪个得到.

这应该有效。

SELECT *
FROM EmployeeInfo
Left JOIN EmployeeEmail
  ON EmployeeInfo.employeeId = EmployeeEmail.employeeId
WHERE EmployeeInfo.hireDate = '2015'
GROUP BY EmployeeInfo.employeeId;