1
4

3 に答える 3

9

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構文を学習するのに助けが必要な場合は、ここに結合の優れた視覚的な説明があります

于 2013-03-01T15:22:59.927 に答える
1

以下のこのクエリは、テーブルIDからProfileのテーブルに少なくとも 1 つの一致がある場合に列のみを選択します:ContactおよびAddress. それらのいずれかまたは両方がnullableLEFT JOINである場合は、代わりに使用すると、他のテーブルに一致するかどうかに関係なく、左側のテーブルすべてのレコードが表示されますINNER JOINLEFT 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'

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-03-01T15:23:48.807 に答える
0

私はあなたの要件として動作するデモを作成しました:

次のクエリは、データベースから一致するすべてのレコードを取得します。プロファイル 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
于 2013-03-01T19:12:48.513 に答える