Ceci est lié à cette question: La jointure de plusieurs tables entraîne des lignes en double
J'ai deux tables que je rejoins. Ils partagent une clé. La table des personnes a un nom par clé primaire mais la table des e-mails a plusieurs e-mails par personId. Je souhaite afficher uniquement le premier e-mail par personne. Actuellement, je reçois plusieurs lignes par personne car elles ont plusieurs e-mails. J'exécute SQL-Server 2005.
EDIT: Ceci est T-SQL. Le premier e-mail est littéralement la première ligne d'e-mail par personne.
Edit 2: Premier e-mail tel que je le vois, ce serait la première ligne d'e-mail qui apparaît dans la jointure pendant que SQL fonctionne via la requête. Peu importe quel e-mail apparaît. Seulement, pas plus d'un e-mail n'apparaît. J'espère que cela clarifie les choses.
Table1: Person
Table2: Email
Select Person.PersonName, Email.Email
From person
left join on Person.ID=Email.PersonId;
SELECT
A.PersonName, A.Email
FROM
(
Select Person.PersonName, Email.Email
,ROW_NUMBER() OVER(PARTITION BY Person.ID ORDER BY Email.Email) AS RN
From person
left join Email on Person.ID=Email.PersonId
) A
WHERE A.RN = 1
J'utiliserais une application externe pour cela, je la trouve plus lisible.
Select Person.PersonName, coalesce(Email.Email,'No email found.') as Email
From person
outer apply (
select top(1) Email.Email
from Email
where Person.ID=Email.PersonId
order by <whatever suits you>
) as Email;
Comme peu importe quel e-mail apparaît. Je pense que le suivant est très direct.
Select Person.PersonName, MIN(Email.Email)
From person
left join email
on Person.ID=Email.PersonId
group by Person.Id, Person.PersonName
select
P.PersonID,
(SELECT TOP 1 E.Email FROM Email E WHERE E.PersonID = P.PersonID ORDER BY <pick your column here>)
from
Person P