跨两个mysql表的“朋友”关系

时间:2011-03-02 15:39:43

标签: mysql sql database tags inner-join

我不太确定如何构建一个sql join来查找特定用户“朋友”的用户。

例如我有两张表

User Table
u_ID  | u_Name
-------------
1     |  bob
2     |  jill
3     |  jack
4     |  susan

Friends Table
f_ID | u_ID1 | u_ID2
--------------------
1    |   1   |   2
2    |   3   |   1
3    |   4   |   2

例如,我需要找到让所有朋友或所有jills朋友获得的方法。

朋友不能有重复的结果

即。可以有一行(u_ID1 = 1,u_ID2 = 2)或(u_ID1 = 2,u_ID = 1)但不是两者,因为它们在技术上是相同的。

这是不正确的查询

SELECT u.u_Name
FROM user u
INNER JOIN friends f ON (f.u_ID1 = '1' OR f.u_ID2 = '1')

提前致谢


解决方案

检查Kris Babic回复解决方案,

也感谢大家的帮助

3 个答案:

答案 0 :(得分:3)

这使用了一个STRAIGHT联接,但应该有效:

select u.u_Name
from friends f, user u
where (f.u_ID1 = '1' and u.u_ID = f.u_ID2) 
  or (f.u_ID2 = '1' and u.u_ID = f.u_ID1)

答案 1 :(得分:1)

对于所有bob的朋友,这应该有用(未经测试)

select u.u_Name
FROM user u
inner join friends f1 on f1.u_uID1 = u.u_ID
inner join friends f2 on f2.u_uID2 = u.u_ID
where u.u_ID = 1

答案 2 :(得分:0)

试试这个:

SELECT u1.u_Name as user1 , u2.u_Name as user2
FROM user as u1 INNER JOIN friends ON u1.u_ID=friends.u_ID1 
INNER JOIN user as u2 ON u2.u_ID=friends.u_ID2