我正在开发一个小应用程序来管理人员及其关系。
我在婚姻和兄弟姐妹的同一“级别”创建了一个关系模型。为了代表父母和孩子,我使用自引用字段。
这背后的想法是,在不违反任何NF的情况下建立人与人之间的互惠关系并避免重复。
我的问题是,获取与一个人相关的所有人的查询很复杂,因为通过正常连接,相应的人也会在结果集中。
有没有办法在结果集中没有人A的情况下查询与A人相关的所有人?
有没有更好的方式来表示互惠关系?
答案 0 :(得分:1)
只需使用where
子句从结果集中筛选出人员A.自己加入persons_relationships表,在一个实例中过滤人A(id为x),并从另一个实例中排除同一个人:
select
pr2.person_id
from
persons_relationships pr1
inner join
persons_relationships pr2 on pr1.relationship_id=pr2.relationship_id
where
pr1.person_id=x and pr2.person_id<>x;