2012-02-16 10 views
1

これはMySQL 5で行われています。SQLクエリの構築 - 複数のクエリが必要ですか?ネストされた選択?

私は、1つ以上のアドレス、電子メール、電話番号を持つメンバーのリストを持っています。 各メンバーには複数の友人がいることもでき、それぞれにアドレス、電子メール、電話番号を持つことができます。

だから私のテーブルです(簡潔にするためにフィールドの簡略化され数):私は、私は彼の住所、電話番号及び電子メールアドレスのすべてに会員情報を取得する1つのクエリを作成する方法を見つけ出すことはできません

member: id, firstName, lastName 
address: id, city, personId 
phone: id, number, personId 
email: id, address, personId 
friend_x_member: id, memberId, friendId 

彼の友人およびそれらの住所、電話番号、電子メールアドレスのすべてと一緒に。おそらく私は本当に1つのクエリでそれをやってはいけないと思いますか?

これは少なくともメンバー情報を取得します。オブジェクトを右に読み込むために行をループする方法を理解する必要があります。しかし、私はあなたが正しい軌道に乗っている.....次に進む手順

select * 
from member, address, email, phone, friend_x_member 
where member.id = '1' and 
     address.personId = member.id and 
     email.personId = friend.id and 
     phone.personId = friend.id and 
     friend_x_member.memberId = member.id 

答えて

1

試してみてください。あなたの既存のクエリー(及び上記のクエリ)が参加し、内部使用している

select * 
from member, address, email, phone 
where member.id in (select '1' union all 
        select friendId from friend_x_member 
        where friend_x_member.memberId = '1') and 
     address.personId = member.id and 
     email.personId = friend.id and 
     phone.personId = friend.id and 

注 - ので、ルックアップテーブルのいずれかがメンバーのための「1」のレコードを持っていない場合、何も返されません。これを回避するには、代わりに外部結合を使用してみてください。

select * 
from member 
left join address on address.personId = member.id 
left join email on email.personId = friend.id 
left join phone on phone.personId = friend.id 
where member.id in (select '1' union all 
        select friendId from friend_x_member 
        where friend_x_member.memberId = '1') 
+0

華麗な、ありがとう!外部結合は、私が必要としていたものです。それを再生した後、すべてのデータを元に戻すことはできませんでしたが、理由はわかりませんでした。これは素晴らしい! – Michaela

0

を知らない、あなただけ再び友人のIDで参加この時間を同じテーブルを追加する必要があります。

select *, P_friend.number as FirendsPhoneNumber 
from member, address, email, phone, friend_x_member, phone P_friend 
where member.id = '1' and address.personId = member.id and email.personId = friend.id and phone.personId = friend.id and friend_x_member.memberId = member.id and member.memberID=P_friend.friendId 

これは厄介です。私はあなたのメインクエリでビューを作成し、次に電話テーブルを使ってビューに参加して、友人の電話を取得します。ちょっと単純です

+0

ありがとうございます。私は試してみてください。 – Michaela

関連する問題