我有一个名为users的数据库表,每个用户的主键为user_id。
我还有一个名为friends的表,其中包含两个字段user_id和friend_user_id。
user_id字段始终是两个user_id中最低的一个,以避免重复输入。
假设我有两个用户,(假设用户ID 1和用户ID 4虽然可以是任何东西)。
如果用户1和用户4的朋友(即共同朋友)的用户如何返回users表中的所有行?
答案 0 :(得分:7)
我会给你食谱:
很像这样:
更新:以下是查询:
select f.friend_user_id from friends f where f.friend_user_id in (
select friend_user_id from friends where user_id=<id_of_user_a>)
and f.user_id=<id_of_user_b>
上述查询返回的id将是user_a和user_b的共同朋友的所有用户的id。如果您想获得有关这些用户的所有详细信息(名称等),请执行以下操作:
select f.friend_user_id,u.* from friends f inner join users u
on u.user_id=f.friend_user_id
where f.friend_user_id in (
select friend_user_id from friends where user_id=<id_of_user_a>)
and f.user_id=<id_of_user_b>
答案 1 :(得分:0)
SELECT friends.friend_user_id FROM user, friends
INNER JOIN friends ON friends.user_id = user.user_id
WHERE user.user_id = 1
AND friend.friend_user_id
IN (SELECT friends.friend_user_id
FROM user, friends
INNER JOIN friends ON friends.user_id = user.user_id
WHERE user_id = 4)