これはこの質問に関連しています: 複数のテーブルを結合すると、重複した行が生成されます
参加しているテーブルが2つあります。彼らは鍵を共有します。 personテーブルには主キーごとに1つの名前がありますが、emailテーブルにはpersonIdごとに複数のメールがあります。 1人あたりの最初のメールのみを表示します。現在、メールが複数あるため、1人に複数の行が表示されます。 SQL-Server 2005を実行しています。
編集:これはT-SQLです。最初のメールは文字通り、1人あたりの最初のメール行です。
編集2:最初のメールは、SQLがクエリを処理するときに結合に表示される最初のメール行になります。どのメールが表示されるかは関係ありません。表示されるメールは1つだけです。それがより明確になることを願っています。
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
私はこれに外側の適用を使用します、私はそれがより読みやすいと思います。
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;
どのメールが表示されるかは問題ではありません。次は非常に直接的だと思います。
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