1

以下の情報に簡略化された 3 つのデータベース テーブル (MySQL) があります。

===============
member
---------------
id
FirstName
===============

member.id = quote_details.member_id

===============
quote_details
---------------
member_id
insurer_id
===============

quote_details.insurer_id = 保険者.id

===============
insurer
---------------
id
Name
===============

出力したいのはmember.FirstNameandinsurer.Nameです。したがって、すべてのテーブル間の結合が必要になることは理解しています。つまり、 member > quote_details と quote_details > insurer です。私は結合タイプに苦労していますが、誰かが私を正しい方向に向けることができることを願っています.

ご回答ありがとうございます。

よろしく、

ニール

明確にするために編集:

私は3つを試しINNER JOINましたが、クエリされたメンバーのFirstNameを持つすべての保険会社のリストを返します:

==========================
FirstName | Insurer
--------------------------
Test      | Insurer One
Test      | Insurer Two
Test      | Insurer Three
==========================

私が必要としているのは、メンバーの見積もりに割り当てられている実際の保険会社だけです。これが物事を少し明確にするのに役立つことを願っています。

編集してサンプル データを追加します。

===================
member
-------------------
id | FirstName
- - - - - - - - - -
 1 | Test
 2 | John
 3 | Jane
===================

=======================
quote_details
-----------------------
member_id | insurer_id
- - - - - - - - - - - -
        1 |          1
=======================

===================
insurer
-------------------
id | Name
- - - - - - - - - -
 1 | Insurer One
 2 | Insurer Two
 3 | Insurer Three
===================

これにより、すべての明確さが得られることを願っています:¬)

4

2 に答える 2

0

基本的に、テーブル内の両方の列がnull不可のINNER JOIN列である場合、ニーズは十分です。quote_details

SELECT  b.FirstName MemberName,
        c.Name InsurerName
FROM    quote_details a
        INNER JOIN member b
            ON a.member_ID = b.id
        INNER JOIN insurer c
            ON a.insurer_ID = c.ID

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

于 2013-03-20T13:28:12.467 に答える
0

データは、メンバーが複数の保険会社を持つことができるように設定されています (逆も同様です)。すべての保険会社を同じ行に表示する場合は、集計を行う必要があります。

select m.FirstName, group_concat(i.Name separator ', ') as Insurers
from member m inner join
     quote_details qd
     ON qd.member_ID = m.id inner join
     insurer i
     ON qd.insurer_ID = i.ID
group by m.FirstName

テーブルのエイリアスを指定するときは、「a」、「b」、「c」などではなく、適切な省略形を使用してください。適切な省略形を使用すると、クエリがはるかに理解しやすくなります。

保険会社のないメンバーがいる場合、それらは出力に表示されません。それらすべてが必要な場合は、次を使用しますleft outer join

select m.FirstName, group_concat(i.Name separator ', ') as Insurers
from member m left outer join
     quote_details qd
     ON qd.member_ID = m.id left outer join
     insurer i
     ON qd.insurer_ID = i.ID
group by m.FirstName

それらを別々の行に配置したい場合:

select m.FirstName, i.Name
from quote_details qd inner join
     member m
     ON qd.member_ID = m.id inner join
     insurer i
     ON qd.insurer_ID = i.ID
于 2013-03-20T13:38:43.803 に答える