2016-06-28 112 views
1

我正在开发一个小应用程序来管理人员及其关系。人与人之间的互惠关系

我创建了一个关于像婚姻和兄弟姐妹一样的“关卡”关系的模型。为了代表父母和孩子,我使用自引用字段。

SQL Fiddle

EER

这背后的想法是,有个人之间的互惠关系不违反任何NF的,并避免重复。

我的问题是,查询获取所有与个人相关的人都很复杂,因为使用正常的连接,相应的人员也会在结果集中。

有没有方法可以查询所有与人员A相关的人员,而无需在结果集中存在人员A?

有更好的方式来表示相互关系吗?

+1

只是一个提示。只是放弃愚蠢的图像几乎没有帮助。我们需要'show create table xyz'的输出,其中xyz是相关的表格。然后一些示例数据和一些预期结果。人们在伪造数据的专栏中这样做。令人敬畏的人用SQLFiddle做这件事,并分享这个网址,这样我们就不必为了你而浪费我们所有的时间。当你不这样做的时候,我们逃跑并没有帮助。所以,这是对于为什么在一半时间内没有解决的问题你可以考虑的建设性批评。 – Drew

+0

@德鲁当我写这个问题时没有想过这个工具。我为问题和答案都添加了一个SQL小提琴。感谢您的建设性反馈。 – berkyl

+0

我很抱歉听起来像个混蛋。只是希望人们得到他们的答案。 :p – Drew

回答

1

只需使用where子句从结果集中筛选出人员A.自加入persons_relationships表本身,在一个实例滤波人A(x的ID),并从另一个排除同一个人:

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; 

Sample fiddle

+0

非常感谢。你能不能给我一个如何让人而不仅仅是身份证的提示?我使用连接的尝试不成功。 – berkyl

+0

@berkyl它是pr2别名上的简单内连接。 – Shadow

+0

谢谢,我的连接问题是连接错误的顺序。 – berkyl