我有三个数据库表:users
,user_profiles
和friends
:
用户
user_profiles
朋友
什么是查找任何用户的朋友列表的查询,还加入表users
和user_profiles
以获取该朋友的个人资料和用户信息?
答案 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 = ?