我想设计一个包含朋友的表,两个人之间的关系,所以我设计了一个包含以下字段的表:FriendId
,Friend_L
,Friend_R
这意味着此人Frind_L
是此人的朋友Friend_R
但是这个设计有一个问题,我必须将每个朋友关系两次添加到表中,以便能够使用此查询找出给定人员的朋友:
SELECT Friend_R
FROM Friends
Where Friend_L= ANY INTEGER ;
任何人都有其他想法这样做而不重复每一个关系?
答案 0 :(得分: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
答案 1 :(得分:0)
你不必这样做。假设您正在寻找id为20的用户的关系。
SELECT *
FROM friends
WHERE left_id = 20 or right_id = 20;
答案 2 :(得分:0)
您无需再添加两次。只需添加一次,然后使用UNION
:
SELECT Friend_R FROM Friends Where Friend_L= ANY INTEGER
UNION
SELECT Friend_L FROM Friends Where Friend_R= ANY INTEGER