2016-11-25 16 views
1

でテーブルに参加:は、私は次のクエリを持っている複数のFKSと行

SELECT p.id, 
    p.firstname, 
    **p.address1id, 
    p.address2id,** 
    r.invoice_id, 
    i.authcode 

FROM membershiprenewals r, 
    Profile p, 
    Invoice i 

WHERE r.orgID = 1 
    and r.period_id = 3 
    and r.status = 0 
    and r.profile_id = p.id 
    and r.invoice_id = i.id; 

このテーブルには、ユーザーはプロフィールや関連するいくつかの詳細を選択します。

プロファイルアドレスは別のテーブル(profileaddress)に格納されます。また、プロファイルは2つのアドレスを持つことができます。これらのアドレスは、p.address1とp.address2を使用して参照されます。

両方のアドレスを取得して単一のレコードに結合するには、このクエリをprofileaddressテーブルに結合する必要があります。私が遊んでてきた

だから私は必要となる結果は以下の列

p.id | p.firstname | .. etc .. | profileaddress1.address | profileaddress1.town | profileaddress2.address | profileaddress2.town | .. etc 

だろうが時間のための文を登録しようが、ちょうどそれをクラックに見えることはできません。

大変助かりました!

ジェイソン

答えて

2

まず、FROM句では決して使用コンマ。 常には、適切で明示的なJOIN構文を使用します。だから、あなたのクエリは次のようになります。

SELECT p.id, p.firstname, **p.address1id, p.address2id,** 
     r.invoice_id, i.authcode 
FROM membershiprenewals r JOIN 
    Profile p 
    ON r.profile_id = p.id JOIN 
    Invoice i 
    ON r.invoice_id = i.id 
WHERE r.orgID = 1 AND r.period_id = 3 AND r.status = 0; 

は、その後、あなたは、2つのアドレステーブルに参加したい:

SELECT p.id, p.firstname, p.address1id, p.address2id, 
     pa1.address, pa1.town, 
     pa2.address, pa2.town, 
     r.invoice_id, i.authcode 
FROM membershiprenewals r JOIN 
    Profile p 
    ON r.profile_id = p.id JOIN 
    Invoice i 
    ON r.invoice_id = i.id LEFT JOIN 
    profileaddress pa1 
    ON p.address1id = pa1.id LEFT JOIN 
    profileaddress pa2 
    ON p.address2id = pa2.id 
WHERE r.orgID = 1 AND r.period_id = 3 AND r.status = 0; 

これは、アドレスのいずれかが欠落している場合にはLEFT JOINを使用しています。

+0

ゴードン..私はあなたの質問をドロップし、それはちょうど走った。正確に私が必要としたもの。ありがとうございました !!!カンマで明示的にJOINする理由を聞くことはできますか?再度、感謝します! – Jason

関連する問題