2010-02-13 74 views
0

我有一个表用户有两个字段:id,名称和另一个表有2个字段的朋友:userid1 userid2。MySQL内连接2列

所以这意味着userid1是userid2的好友。我想,有一个内部或左的连接显示此:

userid1名(得到了来自用户表)是朋友与userid2名称(从用户表了)

东西

SELECT * FROM朋友INNER在friends.userid1 = users.id和friends.userid2 = users.id上加入用户,但这不起作用。

有好的解释请好吗?

如果,例如我在用户表中的下一个细节: ID:1名称:FinalDestiny ID:2名:乔治

,并在朋友表中的下一个细节: ID1:1 ID2 :2

因此,这意味着1是朋友与2

我有一个查询需要得到的1名和第2名和呼应,他们是朋友

FinalDestiny是乔治的朋友

回答

2

我知道你指定要这一个做加盟,但在我看来像你需要两个。我相信这个查询会给你你需要的东西:

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友表连接用户表。然后,我使用(新表).userid2 = Users.id中的用户表加入此新表。这导致了一个包含4列的表格。这些列是朋友表的原始2列以及朋友名称的2列。 u1,u2f,并参考加入的三个表格。用户表与朋友表连接两次。 u1是在Friends.userid1 = User.id上加入的Users表的副本。 u2是在Friends.userid2 = User.id上加入的Users表的副本。

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

让我知道是否需要更多解释。

+0

Whats u1.name?请使用我的规格,用户表,朋友表和我的字段进行查询 – FinalDestiny 2010-02-13 23:25:15

+0

编辑说明。 – 2010-02-13 23:29:37

2

您检查用户是自己的朋友。使用OR在你的选择,以配合用户的朋友:

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

如果,例如我在用户表中的下一个细节: ID:1名称:FinalDestiny ID:2名:乔治

和在朋友表中的下一个细节: ID1:1个ID2:2

因此,这意味着1是朋友与2

我需要一个查询来获取的1名和第n 2和火焰呼应,他们是朋友

FinalDestiny是朋友乔治