Kreuzverweise Relation herstellen ...

… ich weiss sonst nicht wie ich das umschreiben kann,

ich habe eine Tabelle Kontakte

Kontakt_ID | Kontakt_Name
1 | Karl
2 | Heinz
3 | Marta
4 | Dieta
5 | Erika

und eine Tabelle ‘Kontaktrelation’

Kontakt_ID | Kontakt_mit
1 | 2
1 | 3
2 | 3
4 | 5



die Aufagabe der Tabelle ‘Kontaktrelation’ ist, zu zeigen, wer mit wem Kontakt hat. Das funktioniert soweit ganz gut.

Nun will ich, das die Tabelle ‘Kontaktrelation’ auch automatisch eine Raltion anders herum generiert, also (a,b)und (b,a). Was bedeutet, wenn Karl mit Heinz in Kontakt steht, dann steht auch Heinz mit Karl in Kontakt.

Die Tabelle Müsste so aussehen:

Kontakt_ID | Kontakt_mit
1 | 2
1 | 3
2 | 1
2 | 3
3 | 1
3 | 2
4 | 5
5 | 4

Gibt es da etwas eine ‘fertige’ SQL Anweisung, oder muss ich das selber generieren, wie etwa so …

Insert into Kontaktrelation where Kontakt_ID = 1 and Kontakt_mit = 2
Insert into Kontaktrelation where Kontakt_ID = 2 and Kontakt_mit = 1

???

vielen Dank
Gruss
Frank

Die Daten stehen doch schon in der Tabelle, nur ‘anders rum’. Egal:

test=*# select * from kontakte ;
 id1 | id2
-----+-----
   1 |   2
   1 |   3
   2 |   3
   4 |   5
(4 rows)

test=*# create view view_kontakte as select id1, id2 from kontakte union all select id2, id1 from kontakte order by id1, id2;
CREATE VIEW
test=*# select * from view_kontakte;
 id1 | id2
-----+-----
   1 |   2
   1 |   3
   2 |   1
   2 |   3
   3 |   1
   3 |   2
   4 |   5
   5 |   4
(8 rows)

Andreas