SQL查询构造 - 需要多个查询?嵌套选择?

时间:2012-02-16 11:25:55

标签: mysql sql

这是在MySQL 5中完成的。

我有一个包含一个或多个成员的列表:地址,电子邮件和电话号码。 每个成员也可以有多个朋友,每个朋友也可以有地址,电子邮件和电话号码。

所以我的表格是(简化的字段数量):

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

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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

这很麻烦是的,我会用您的主要查询创建一个视图,然后再次使用电话表加入视图以获取朋友的电话。为简单起见。