0

我想设计一个包含两个人之间的朋友关系的表格,所以我设计了一个包含以下字段的表格:FriendId,,,Friend_LFriend_R

这意味着该人Frind_L是该人的朋友Friend_R

但是这种设计有一个问题,我必须将每个朋友关系两次添加到表中,以便能够使用此查询找出谁是给定人的朋友:

SELECT Friend_R
FROM Friends
Where Friend_L= ANY INTEGER ;

任何人有其他想法来做到这一点而不重复每一个关系?

4

3 回答 3

1

尝试使用不同的查询?

 SELECT
  Friend_R as Friend
 FROM
  Friends
 WHERE
  Friend_L = :x
UNION
 SELECT
  Friend_L as Friend
 FROM
  Friends
 WHERE
  Friend_R = :x

第一个与您的相同,但带有另一个查询的 UNION 应该返回所有替代结果。UNION(没有 ALL)也会为您删除重复项。

或者,如果您真的觉得有必要,您可以使用 CASE 一次性完成...

SELECT
 CASE WHEN (Friend_L = :x) THEN Friend_R ELSE Friend_L END AS Friend
FROM
 Friends
WHERE
 Friend_L = :x OR Friend_R = :x
于 2013-07-10T20:54:08.393 回答
0

你不必那样做。假设您正在寻找与 id 为 20 的用户的关系。

SELECT *
FROM friends
WHERE left_id = 20 or right_id = 20;
于 2013-07-10T20:51:14.897 回答
0

您不需要添加两次。只需添加一次并使用UNION

SELECT Friend_R FROM Friends Where Friend_L= ANY INTEGER
UNION
SELECT Friend_L FROM Friends Where Friend_R= ANY INTEGER
于 2013-07-10T20:52:46.593 回答