2016-10-19 18 views
0

私はPersonTypes.type_idがvalueと異なるだけで、これらの電子メールアドレスを取得するにはどのように3つのテーブルインナーには、3つのテーブルを結合条件

Person 
- id 
- other_fields 

PersonTypes 
- id 
- person_id 
- type_id 

PersonEmails 
- id 
- person_id 
- email_address 

を持っている場合、取得しますか? 私はMariaDB v.10を使用しています。すべてのテーブルで左外部結合を使用して、type_idが異なるこれらの行のみを返しました。しかし、結果についてはわかりません。

SELECT pe.email_address 
FROM Person p 
LEFT OUTER JOIN PersonTypes pt ON p.id = pt.person_id 
LEFT OUTER JOIN PersonEmails pe ON p.id = pe.person_id 
WHERE pt.type_id != 14; 
+0

あなたは私達にあなたの要求のサンプルを表示することができますを選択し、 ? –

+0

はい、コードを追加しました – kxyz

答えて

1
select P1.id, 
     P2.type_id, -- just for the sake of this output 
     P2.email_address 
from Person P1 
inner join 
    (
    select PT.person_id, PT.type_id, PE.email_address 
    from PersonTypes PT 
    inner join PersonEmails PE 
     on PE.person_id = PT.person_id 
    where PT.type_id <> 14 
    ) P2 
    on P2.person_id = P1.id 

または

select pe.email_address 
from PersonEmails pe 
where person_id not in 
    (
    select person_id 
    from PersonTypes 
    where Type_id = 14 
    ) 
+0

ありがとうございます、私はもう1つの質問があります - PersonTypesが空である場合のケースをカバーしていますか?それでは、email_addresが返されます。 – kxyz

+0

@kxyz 2番目のものは – JohnHC

+0

ありがとう、もう一度感謝します:) – kxyz

0

クエリが14をTYPE_IDと合流PersonとPersonsEmailsテーブルデータ持っていないすべての人

SELECT pe.email_address 
FROM PersonTypes pt 
INNER JOIN Person p ON pt.person_id = p.id 
INNER JOIN PersonEmails pe ON pt.person_id = pe.person_id 
WHERE pt.type_id != 14; 
+0

これはPersonTypesが空である場合をカバーしません。 申し訳ありませんが、私は上記のことについて言及していません。 – kxyz

関連する問題