3 に答える
JOIN
のテーブルprofile.id
と他のテーブルのテーブルにアクセスできるはずですprofileid
。
が 3 つのテーブルすべてに存在することが確実な場合はprofileid
、 を使用できますINNER JOIN
。はINNER JOIN
、すべてのテーブルで一致する行を返します。
select p.id,
p.name,
c.desc ContactDesc,
a.desc AddressDesc
from profile p
inner join contact c
on p.id = c.profileid
inner join address a
on p.id = a.profileid
where p.name = 'bla'
and c.ord = 1
and a.ord = 1
一致する行があるかどうかわからない場合は、次を使用できますLEFT JOIN
。
select p.id,
p.name,
c.desc ContactDesc,
a.desc AddressDesc
from profile p
left join contact c
on p.id = c.profileid
and c.ord = 1
left join address a
on p.id = a.profileid
and a.ord = 1
where p.name = 'bla'
JOIN
構文を学習するのに助けが必要な場合は、ここに結合の優れた視覚的な説明があります
以下のこのクエリは、テーブルID
からProfile
のテーブルに少なくとも 1 つの一致がある場合に列のみを選択します:Contact
およびAddress
. それらのいずれかまたは両方がnullableLEFT JOIN
である場合は、代わりに使用すると、他のテーブルに一致するかどうかに関係なく、左側のテーブルのすべてのレコードが表示されますINNER JOIN
。LEFT JOIN
SELECT a.*,
b.desc as BDESC,
c.desc as CDESC
FROM Profile a
INNER JOIN Contact b
ON a.ID = b.ProfileID
INNER JOIN Address c
ON a.ID = c.ProfileID
WHERE b.ORD = 1 AND
c.ORD = 1 AND
a.Name = 'nameHERE'
LEFT JOIN
バージョン:
SELECT a.*,
b.desc as BDESC,
c.desc as CDESC
FROM Profile a
INNER JOIN Contact b
ON a.ID = b.ProfileID AND b.ORD = 1
INNER JOIN Address c
ON a.ID = c.ProfileID AND c.ORD = 1
WHERE a.Name = 'nameHERE'
結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。
私はあなたの要件として動作するデモを作成しました:
次のクエリは、データベースから一致するすべてのレコードを取得します。プロファイル ID、名前、連絡先テーブルの説明を取得します。
select p.id,p.name,p.stauff,c.descr,a.descr from profile as p
inner join contact as c on c.profileid=p.id
inner join address as a on a.profileid=p.id
where p.name="bla" and c.ord=1 and a.ord=1