这是在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
答案 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
这很麻烦是的,我会用您的主要查询创建一个视图,然后再次使用电话表加入视图以获取朋友的电话。为简单起见。