2016-06-28 88 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