在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 [email protected]
2 Tony Iommi [email protected]
3 Geezer Butler [email protected]
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句