在 V6R1 的 DB2 for i(又名 DB2/400)中,我想编写一个 SQL SELECT 语句,它从标题记录中返回一些列,而一些列仅从一个匹配的详细记录中返回。它可以是任何匹配记录,但我只想要其中一个的信息。我可以使用下面的查询来完成此操作,但我认为必须有比使用 WITH 子句更简单的方法。我会在需要时使用它,但我一直在想,“一定有更简单的方法”。本质上,我只是从 Person 表返回 firstName 和 lastName ...加上 PersonEmail 表中匹配的电子邮件地址之一。
谢谢!
with theMinimumOnes as (
select personId,
min(emailType) as emailType
from PersonEmail
group by personId
)
select p.personId,
p.firstName,
p.lastName,
pe.emailAddress
from Person p
left outer join theMinimumOnes tmo
on tmo.personId = p.personId
left outer join PersonEmail pe
on pe.personId = tmo.personId
and pe.emailType = tmo.emailType
PERSONID FIRSTNAME LASTNAME EMAILADDRESS
1 Bill Ward p1@home.com
2 Tony Iommi p2@cell.com
3 Geezer Butler p3@home.com
4 John Osbourne -
最佳答案
这听起来像是 row_number()
的工作:
select p.personId, p.firstName, p.lastName, pe.emailAddress
from Person p left outer join
(select pe.*,
row_number() over (partition by personId order by personId) as seqnum
from PersonEmail pe
) pe
on pe.personId = tmo.personId and seqnum = 1;
关于sql - DB2 返回第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731289/