2016-06-28 10 views
1

私は人とその関係を管理するための小さなアプリを開発しています。人の相互関係

私は、結婚や兄弟と同じ「レベル」の関係のモデルを作成しました。親と子を表すために、私は自己参照フィールドを使用します。

SQL Fiddle

EER

この背後にある考え方は、すべてのNFの、重複を避けるためにに違反することなく、人の間の相互の関係を持つこと、です。

私の問題は、人に関連するすべての人物を取得するためのクエリは複雑です。通常の結合では、対応する人物も結果セットに含まれるからです。

結果セットに人物Aを持たずに、人物Aに関連するすべての人物を照会する方法はありますか?

相互関係を表現する良い方法はありますか?

+1

だけ先端:セルフは、一例では(XのIDを持つ)人物Aのフィルタリング、および他の一方から同じ人を除く、自身にpersons_relationshipsテーブルを結合します。馬鹿馬鹿しい画像を落とすだけではほとんど役に立たない。 'show create table xyz'の出力が必要です。ここで、xyzは関連するテーブルです。次に、いくつかのサンプルデータといくつかの期待される結果。人々は偽のデータの列でこれを行います。恐ろしい人たちはSQLFiddleでこれを行い、URLを共有するので、時間を無駄にする必要はありません。あなたがそれをしないと、私たちは逃げて助けません。それは、時間の半分が何も解決されない理由について考えることができる建設的な批判です。 – Drew

+0

@Drew質問を書いているときにこのツールについて考えなかった。質問と回答の両方にSQL Fiddleを追加しました。建設的なフィードバックをありがとう。 – berkyl

+0

私はジャークのように聞こえることをお詫びします。人々が彼らの答えを得てほしい。 :p – Drew

答えて

1

where句を使用して、結果セットから人物Aを除外するだけです。

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