【问题标题】:Query to find "friends of friends" SQL查询查找“朋友的朋友”SQL
【发布时间】:2015-06-09 13:59:00
【问题描述】:

我遇到了一些 sql 问题...

我有一个包含 3 列的表:user_id、name、friend_id

我需要为每个 user_id 找到他朋友的朋友,但不是朋友!结果架构应该是 user_id | suggested_user_id

我已经搜索过答案,但问题是用户和朋友在同一张桌子上!我对postgresql不是很好,所以如果我不清楚或者很容易,请原谅,但我真的需要帮助!

非常感谢

【问题讨论】:

  • MySQL 和 Postgresql?不要标记不涉及的产品...另外,我建议使用用户表(用户 ID 和名称)和单独的友谊表。
  • 好的,谢谢你的建议;我不能改变桌子,这就是我需要帮助的原因! :(

标签: sql database postgresql


【解决方案1】:

会是这样的:

select DISTINCT
    u1.user_id as user_id,u3.user_id as suggested_user_id
    from
    users as u1 
    inner join users as u2 on u1.user_id=u2.friend_id
    inner join users as u3 on u2.user_id=u3.friend_id
where u1.user_id<>u3.user_id

【讨论】:

  • 您还需要检查 u3.user_id 不是 u1 的直接朋友(在这种情况下,u1u2 都共享一个“直接”朋友)。跨度>
  • 好的,谢谢,另一个小问题:如何避免重复?因为在结果中我看到 user1 有很多次相同的建议朋友...
  • 添加了 DISTINCT 关键字来解决欺骗问题。我们最终会到达那里...... :)
  • 哇,我现在感觉好傻,非常感谢,对不起,我的名声不允许我投票给答案!
【解决方案2】:

进行自连接,即与自身连接表:

select t1.user_id, t1.name, t2.friend_id as suggested_user_id
from usertable t1
  join usertable t2 on t1.friend_id = t2.user_id 

也许你想添加

 where t1.user_id <> t2.friend_id 

为了避免将用户列为自己的朋友。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多