SQL中的双向关系,有2个表,没有重复

时间:2013-12-21 18:50:27

标签: sql relational-database

假设您有2个表:userfriends - 您希望将所有朋友加入您查询的用户。

显而易见的答案是:

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()并不是很干净,并且可能会带来巨大的性能损失。

还有其他方法吗?

1 个答案:

答案 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