假设您有2个表:user
和friends
- 您希望将所有朋友加入您查询的用户。
显而易见的答案是:
SELECT friend.uid
FROM `user`
JOIN friends ON user.uid = friends.user
JOIN user AS friend ON friends.friend = friend.uid
WHERE user.uid = $user_id
这很好但是它是一种单向关系。为了完成这项工作,我必须为每个关系添加2行。
另一方面,这有两种方式:
SELECT friend.uid
FROM `user`
JOIN friends ON user.uid IN(friends.col1, friends.col2)
JOIN user AS friend ON
friend.uid IN(friends.col1, friends.col2)
WHERE user.uid = $user_id AND friend.uid != user.uid
但这是因为使用多个IN()
并不是很干净,并且可能会带来巨大的性能损失。
还有其他方法吗?
答案 0 :(得分:1)
您只需使用UNION ALL
并完全跳过联接,例如;
SELECT friends.col1 friend_uid FROM friends WHERE friends.col2 = $user_id
UNION ALL
SELECT friends.col2 FROM friends WHERE friends.col1 = $user_id