【问题标题】:MySQL inner join with 2 columnsMySQL 内连接有 2 列
【发布时间】:2011-01-16 14:23:52
【问题描述】:

我有一个表 users 有 2 个字段:id 、 name 和另一个表 Friends 有 2 个字段:userid1 userid2 。

所以这意味着 userid1 是 userid2 的朋友。我想用一个内连接或左连接来显示:

userid1 名称(从 users 表获取)是 userid2 名称(从 users 表获取)的朋友

某事

SELECT * FROM friends INNER JOIN users ON friends.userid1 = users.id AND friends.userid2 = users.id 但这不起作用。

请问有什么好的查询和好的解释吗?

例如,如果我在 users 表中有以下详细信息: ID : 1 名称 : FinalDestiny ID : 2 NAME : George

以及朋友表中的下一个详细信息: ID1:1 ID2:2

所以这意味着 1 是 2 的朋友。

我需要一个查询来获取 1 的名称和 2 的名称并回显他们是朋友

FinalDestiny 是 George 的朋友

【问题讨论】:

    标签: mysql entity-relationship inner-join


    【解决方案1】:

    我知道您指定要通过一个连接完成此操作,但在我看来您需要两个连接。我相信这个查询会给你你所需要的:

    SELECT u1.Name, u2.Name
    FROM Users u1, Users u2, Friends f
    WHERE u1.id = f.userid1 AND u2.id = f.userid2

    我正在使用 Users.id = Friends.userid1 将 Users 表与 Friends 表连接起来。然后,我将这个新表与(新表).userid2 = Users.id 上的用户表连接起来。这将生成一个包含 4 列的表。这些列是 Friends 表的原始 2 列,另外还有 2 列用于朋友的姓名。 u1u2f 指的是连接的三个表。 users 表与friends 表连接了两次。 u1 是在 Friends.userid1 = User.id 上加入的用户表的副本。 u2 是在 Friends.userid2 = User.id 上加入的 Users 表的副本。

    从这个有 4 列的表中,我只选择了朋友的名字。

    如果需要更多解释,请告诉我。

    【讨论】:

    • u1.name 是什么?请使用我的规格、用户表、朋友表和我的字段进行查询
    【解决方案2】:

    您检查用户是否是自己的朋友。在您的选择中使用OR 来匹配用户的朋友:

    SELECT * FROM friends INNER JOIN users ON friends.userid1 = users.id OR friends.userid2 = users.id 
    

    【讨论】:

      【解决方案3】:

      例如,如果我在 users 表中有以下详细信息: ID : 1 名称 : FinalDestiny ID : 2 NAME : George

      以及朋友表中的下一个详细信息: ID1:1 ID2:2

      所以这意味着 1 是 2 的朋友。

      我需要一个查询来获取 1 的名称和 2 的名称并回显他们是朋友

      FinalDestiny 是 George 的朋友

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多