【问题标题】:MySQL: INNER JOINMySQL:内部连接
【发布时间】:2010-06-03 06:10:16
【问题描述】:

我有一个包含 UserId 和他的朋友 ID 的表格:

----------------------------------------------
UserFriendsId    |    UserId    |    FriendId
----------------------------------------------
     1                  1              2
----------------------------------------------
     2                  1              3
----------------------------------------------
     3                  2              1
----------------------------------------------
     4                  2              3
----------------------------------------------

此表数据显示 User-1 和 User-2 是朋友,并且他们还与 User-3 有朋友关系。 现在我想在 UserId 1 和 UserId 2 中找到共同的朋友,例如: 例如,我的查询是:用户 1 和用户 2 有 1 个共同的朋友 FriendId 3。

为此,我使用 SQL 查询进行 INNER JOIN:

SELECT t1.* 
  FROM userfriends t1 
 INNER JOIN userfriends t2 
    ON t1.FriendId = t2.FriendId 
 WHERE t1.UserId = 2

但不返回所需的结果..

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    select * 
      from MyTable as A
     inner join MyTable as B 
        on     (A.UserID = 1 and B.UserID = 2)
           and (A.FriendID = B.FriendID)
    

    编辑

    【讨论】:

      【解决方案2】:
       SELECT table1.name, table2.salary
        FROM employee AS table1 INNER JOIN info AS table2 ON table1.name = table2.name;
      

      【讨论】:

        【解决方案3】:

        试试这个查询(与其他人发布的非常相似)

        SELECT t1.UserID,T2.userID,T1.FriendID 
          FROM userfriends t1 
          JOIN userfriends t2 
            ON     (t1.FriendId = t2.FriendId )
               and (T1.userID <>T2.userID)
         WHERE t1.UserId = 2 
           and T2.userId=1
        

        请注意,一旦您删除绝对 ID,这会报告每个友谊链两次。为避免这种情况,我要求 T1.UserID 小于 T2.userID:

        SELECT t1.UserID,T2.userID,T1.FriendID 
          FROM userfriends t1 
          JOIN userfriends t2 
            ON     (t1.FriendId = t2.FriendId )
               and (T1.userID < T2.userID)
        

        【讨论】:

        • 你认为它会如何报告两次?检查这些子句t1.UserId = 2 and T2.userId=1。然后检查(T1.userID &lt; T2.userID)(T1.userID &lt;&gt;T2.userID)都没用。
        • @Sujee:砰(用手击中头部。)你是对的我对一般情况考虑太多了!抱歉!
        • 没问题@lexu。有时我也会遇到这种情况!
        【解决方案4】:

        请试试这个

        select u1.FriendId
        from userfriends u1
        inner join userfriends u2 on u1.FriendId = u2.FriendId
        where u1.UserId = 1 and u2.UserId = 2
        

        【讨论】:

        • @Sujee:在我的回复下方查看我对您的评论的回答.. 我正在删除反对票。
        猜你喜欢
        • 1970-01-01
        • 2017-07-07
        • 2017-06-24
        • 2014-01-24
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多