我有一个表用户有2个字段:id,name和另外两个有两个字段的表朋友:userid1 userid2。
所以这意味着userid1是userid2的朋友。我希望,通过一个内部或左边的连接来显示:
userid1名称(来自用户表)是具有userid2名称的朋友(来自用户表)
东西
SELECT * FROM friends INNER JOIN用户ON friends.userid1 = users.id AND friends.userid2 = users.id但这不起作用。
任何好的查询都有好的解释吗?
例如,如果我在users表中有下一个详细信息: ID:1 NAME:FinalDestiny ID:2 NAME:George
以及friends表中的下一个详细信息: ID1:1 ID2:2
所以这意味着1是2的朋友。
我需要一个查询来获取名称1和名称2并回应他们是朋友
FinalDestiny是乔治的朋友
答案 0 :(得分:2)
您检查用户是否为自己的朋友。在您的选择中使用OR
来匹配用户的朋友:
SELECT * FROM friends INNER JOIN users ON friends.userid1 = users.id OR friends.userid2 = users.id
答案 1 :(得分:2)
我知道您指定要通过一个连接完成此操作,但在我看来,您需要两个连接。我相信这个查询会为您提供所需的信息:
SELECT u1.Name, u2.Name
FROM Users u1, Users u2, Friends f
WHERE u1.id = f.userid1 AND u2.id = f.userid2
我正在使用Friends表加入Users表,其中包含Users.id = Friends.userid1。然后,我正在使用(新表)上的Users表加入这个新表.userid2 = Users.id。这导致具有4列的表。这些列是Friends表的原始2列,另外还有2列用于朋友的名称。 u1
,u2
和f
并引用已加入的三个表。 users表与friends表连接两次。 u1
是在Friends.userid1 = User.id上加入的Users表的副本。 u2
是在Friends.userid2 = User.id上加入的Users表的副本。
从这个包含4列的表中,我只选择了朋友的名字。
如果需要更多解释,请告诉我。
答案 2 :(得分:0)
例如,如果我在users表中有下一个详细信息: ID:1 NAME:FinalDestiny ID:2 NAME:George
以及friends表中的下一个详细信息: ID1:1 ID2:2
所以这意味着1是2的朋友。
我需要一个查询来获取名称1和名称2并回应他们是朋友
FinalDestiny是乔治的朋友