SQL найти общих друзей друзей - PullRequest
0 голосов
/ 07 июля 2019

Учитывая таблицу User и таблицу Friend, для каждого пользователя в таблице user я хочу написать SQL-запрос, чтобы найти общих друзей своих друзей, т. Е. Для идентификатора пользователя в таблице User найти существующих друзей, которые являются друзьями друг друга. Например

user_table
userID
1
2
5

friend_table
user1    user2
1        3   
1        4
3        4
5        3
5        6

Я хочу получить:

user friend1 friend2 
1    3       4 

Я пробовал что-то вроде этого, чтобы получить ID пользователя и его друзей: (добавлен UNION только для устранения дубликатов в результате двунаправленных связей)

with ftable as (
    select user1,user2 from friend_table
),
user_friend as (
    select distinct userID, friend
    from (
        select u.userID, ft.user2 AS friend
        from user_table u JOIN ftable ft ON u.userID = ft.user1

        UNION 

        select u.userID, ft.user1 AS friend
        from user_table u JOIN ftable ft ON u.userID = ft.user2
    ) a
)



UserID  friends
1        3   
1        4
5        3
5        6

Как найти друзей, которые дружат друг с другом?

1 Ответ

0 голосов
/ 07 июля 2019

Вы можете просто проверить друзей, чтобы узнать, есть ли у них общий друг, о котором вы заботитесь.Предполагая, что отношения являются двунаправленными:

with friends as (
      select f.user
      from friend_table ft
      where ft.user1 = @user  -- the original friend
     )
select *
from friend_table ft join 
     friends f1
     on ft.user1 = f1.user join
     friends f2
     on ft.user2 = f2.user
where ft.user1 < ft.user2   -- eliminate duplicates;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...