我有以下3个表:Users
,Friendship
& Location
我需要编写查询,根据用户ID从所有3个表中提取数据。
我认为这里的技巧是你必须根据友谊表中的两列来提取数据,即userid和friendid(所以两者都是朋友)并根据你需要的用户朋友列表,你需要拉他的朋友的名字,相应的电子邮件和位置。
我已经使用连接编写了一些查询,但无法获得我上面提到的所需内容。
任何帮助都会非常感激。
答案 0 :(得分:1)
select f.id as friendshipid,
f.userid,
f.friendid,
u.name,
u.email,
l.location
from (select id, userid, friendid
from friendship
union all
select id, friendid, userid
from friendship) f
left join location l
on f.friendid = l.userid
left join users u
on f.friendid = u.id
where f.userid = 2
你可以在这里看到一个小提琴测试:http://sqlfiddle.com/#!6/8eba4/13/0
我使用内联视图来反转友谊表并使用联合连接回表本身,这样查询就可以看到两个方向的友谊,因为它们只存储在一个方向上。
答案 1 :(得分:0)
如果您一次只提取一个ID,则无需执行子查询即可执行此操作。
SELECT friendship.id FriendshipID
, @SearchedID UserID
, users.id FriendID
, users.name Name
, users.email Email
, location.location Location
FROM friendship
INNER JOIN users
ON friendship.userid = users.id
OR friendship.friendid = users.id
INNER JOIN location
ON users.id = location.userid
WHERE
users.id <> @SearchedID
AND (friendship.userid = @SearchedID OR friendship.friendid = @SearchedID);