2016-06-28 13 views
1

Ich entwickle eine kleine App, um Personen und ihre Beziehungen zu verwalten.Gegenseitige Beziehung zwischen Personen

habe ich ein Modell für die Beziehungen auf dem gleichen „Ebene“ wie Ehe und Geschwister. Um Eltern und Kinder darzustellen, verwende ich selbstbezügliche Felder.

SQL Fiddle

EER

Die Idee dahinter ist, wechselseitige Beziehungen zwischen Personen zu haben, ohne dass NF der Verletzung und Duplikate zu vermeiden.

Mein Problem ist, dass die Abfrage alle Personen zu erhalten, die auf eine Person bezogen werden, ist komplex, da mit der entsprechenden Person normalen kommen auch in der Ergebnismenge wäre.

Gibt es eine Möglichkeit, alle Personen zu Person A im Zusammenhang abzufragen, ohne in den resultset Person A mit?

Gibt es eine bessere Art und Weise wechselseitige Beziehungen zu vertreten?

+1

Nur eine Spitze. Ein doofes Bild einfach fallen zu lassen, ist kaum hilfreich. Wir brauchen die Ausgabe von 'show create table xyz', wobei xyz die relevanten Tabellen sind. Dann einige Beispieldaten und einige erwartete Ergebnisse. Die Leute machen das in Spalten gefälschter Daten. Die Awesome People machen das mit SQLFiddle und teilen die URL, damit wir nicht unsere ganze Zeit verschwenden müssen, um es für Sie zu machen. Wenn Sie das nicht tun, fliehen wir und helfen nicht. Also, das ist konstruktive Kritik, über die Sie nachdenken können, warum nichts die halbe Zeit gelöst ist. – Drew

+0

@Drew Ich dachte nicht über dieses Werkzeug nach, als ich die Frage schrieb. Ich habe eine SQL Fiddle für Frage und Antwort hinzugefügt. Vielen Dank für Ihr konstruktives Feedback. – berkyl

+0

Ich entschuldige mich dafür, wie ein Idiot zu klingen. Ich möchte nur, dass die Leute ihre Antwort bekommen. : – Drew

Antwort

1

Verwenden Sie einfach die where Klausel von der resultset Person A auszufiltern. Selbst treten die persons_relationships Tabelle auf mich selbst, Filterung für Person A (mit der ID von x) in einem Fall, und ohne die gleiche Person von der anderen:

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

Vielen Dank. Könnten Sie mir bitte einen Tipp geben, wie Sie die Personen und nicht nur die ID bekommen? Meine Versuche, einen Join zu verwenden, waren nicht erfolgreich. – berkyl

+0

@berky ist es eine einfache innere Verbindung auf dem pr2-Alias. – Shadow

+0

danke, mein Problem mit dem Join war eine falsche Reihenfolge der Joins. – berkyl

Verwandte Themen