SQL加入帮助朋友列表

时间:2010-02-04 21:52:49

标签: sql mysql

我有三个数据库表:usersuser_profilesfriends

用户

  • ID
  • 用户名
  • 密码

user_profiles

  • ID
  • USER_ID
  • FULL_NAME

朋友

  • ID
  • usera_id
  • userb_id

什么是查找任何用户的朋友列表的查询,还加入表usersuser_profiles以获取该朋友的个人资料和用户信息?

4 个答案:

答案 0 :(得分:2)

使用:

SELECT f.username,
       up.*
  FROM USERS f
  JOIN USER_PROFILES up ON up.user_id = f.id
  JOIN FRIENDS fr ON fr.userb_id = f.id
  JOIN USERS u ON u.id = fr.usera_id
 WHERE u.username = ?

...假设userb_id是朋友ID。

答案 1 :(得分:1)

这可能不是最好的方法,但这感觉就像合乎逻辑的方式:

select a.id , a.friend_id ,
Users.username
from
 ( SELECT id , IF(usera_id = 1, userb_id , usera_id) friend_id
 FROM friends
 where usera_id = 1 OR userb_id = 1 ) a
left join Users on a.friend_id = Users.id

这使用了mySQL函数,因此可能无法在Oracle / MSSQL中使用

答案 2 :(得分:0)

摒弃坏习惯(在FROM子句中不使用JOIN表示法):

SELECT a.id, a.username, a.full_name,
       b.id, b.username, b.full_name
  FROM friends AS f, users AS ua, users AS ub,
       user_profiles AS a, user_profiles AS b
 WHERE f.usera_id = ua.id
   AND f.userb_id = ub.id
   AND a.user_id  = ua.id
   AND b.user_id  = ub.id

关键是使用表别名(所有那些'AS'子句)并在必要时多次引用同一个表。

有人可以用JOIN写这个。

答案 3 :(得分:0)

eugene y's answer进行一些修改,这会有效吗?

SELECT * FROM users u
JOIN friends f ON (f.userb_id = u.id OR f.usera_id = u.id)
JOIN user_profiles p ON u.id = p.user_id
WHERE u.id = ?