2012-02-16 81 views
1

這是在MySQL 5中完成的。SQL查詢構建 - 需要多個查詢?嵌套選擇?

我有一個或多個地址,電子郵件和電話號碼的成員列表。 每個成員也可以有多個朋友,每個朋友也可以有地址,電子郵件和電話號碼。

所以我的表是(簡體號爲簡潔的字段):

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

我無法弄清楚如何使一個查詢在那裏我得到的會員信息與所有他的地址,電話號碼和電子郵件地址以及他的朋友和他們的所有地址,電話號碼,電子郵件地址。我想也許我不應該在一個查詢中做這件事?

這至少得到我的成員信息,我只需要弄清楚如何遍歷行以獲得我的對象填充正確。但我不知道從哪裏何去何從.....

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 2012-02-16 15:23:26

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 2012-02-16 15:22:51