我想设计一个包含两个人之间的朋友关系的表格,所以我设计了一个包含以下字段的表格:FriendId
,,,Friend_L
Friend_R
这意味着该人Frind_L
是该人的朋友Friend_R
但是这种设计有一个问题,我必须将每个朋友关系两次添加到表中,以便能够使用此查询找出谁是给定人的朋友:
SELECT Friend_R
FROM Friends
Where Friend_L= ANY INTEGER ;
任何人有其他想法来做到这一点而不重复每一个关系?
我想设计一个包含两个人之间的朋友关系的表格,所以我设计了一个包含以下字段的表格:FriendId
,,,Friend_L
Friend_R
这意味着该人Frind_L
是该人的朋友Friend_R
但是这种设计有一个问题,我必须将每个朋友关系两次添加到表中,以便能够使用此查询找出谁是给定人的朋友:
SELECT Friend_R
FROM Friends
Where Friend_L= ANY INTEGER ;
任何人有其他想法来做到这一点而不重复每一个关系?
尝试使用不同的查询?
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
你不必那样做。假设您正在寻找与 id 为 20 的用户的关系。
SELECT *
FROM friends
WHERE left_id = 20 or right_id = 20;
您不需要添加两次。只需添加一次并使用UNION
:
SELECT Friend_R FROM Friends Where Friend_L= ANY INTEGER
UNION
SELECT Friend_L FROM Friends Where Friend_R= ANY INTEGER