如何解决如何从在主键上返回多行的连接中选择第一行
我有两个要加入的表。他们共用一个钥匙。 employee
表的每个主键有一个名称,但 email
表的每个 employeeId
有多个电子邮件。
我只想显示每位员工的第一封电子邮件。目前,每个员工都有多行,因为他们有多封电子邮件。我正在运行 SQL Server 2019。
编辑:我看到的第一封电子邮件将是在 SQL 通过查询工作时显示在联接中的第一封电子邮件行。我不管出现哪个电子邮件。只是显示不超过一封电子邮件。我希望这样说得更清楚。
我当前的查询:
Select Employee.PersonName,Email.Email
From Employee
left join on Employee.ID = Email.employeeId;
解决方法
一种方法使用子查询:
select ep.personname,em.*
from employee ep
cross apply (
select top (1) em.email
from email em
where em.employeeid = ep.id
order by em.email
) em
如果你只想要电子邮件而不是别的,聚合也可以:
select ep.personname,(select min(em.email) from email em where em.employeeid = ep.id) as email
from employee ep
或者:
select ep.personname,min(em.email) as email
from employee ep
left join email em on em.employeeid = ep.id
group by ep.id,ep.personname
,
假设您有以下表格:
- 员工(Id、PersonName)
- 电子邮件(Id、EmployeeId*、电子邮件)
您可以做的是使用 ROW_NUMBER 按 EmployeeId 进行分区并对电子邮件 ID 进行排序:
SELECT Employee.PersonName,Email.Email
FROM Employee
LEFT JOIN (SELECT EmployeeId,Email,ROW_NUMBER(PARTITION BY EmployeeId ORDER BY Id FROM Email) RN) Email
ON (Employee.Id = Email.EmployeeId)
WHERE Email.RN = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。