Problem mit Beziehungen 1-n oder n-m und SQL Abfragen

Hallo,

Ich beschäfftige mich seit einiger Zeit mit SQL und habe 2 Fragen allgemein zu Beziehungen und eine weitere zu den SQL Select Abfragen.
Weil ich mit PostgreSQL nicht mehr weitergekommen bin habe ich es mal mit Access versucht unter anderem auch um gute Bilder für euch zu erstellen.

Ich habe zwei Tabellen:

Bild zu den Beziehungen:

Personen:
ID INTEGER
Deutsch TEXT
Info TEXT
ElID1 INTEGER
ElID2 INTEGER

Element:
ID INTEGER
ElementInfo TEXT


So nun möchte ich eine 1-n Beziehung von ElID1 zu ID von Element und eine weitere von ElID2 zu Element ID setzen. Eigentlich ist das eine n-m Beziehung und ich müsste eine extra Tabelle anlegen was ich danach auch getan habe. Deswegen möchte ich erstmal fragen ob dies richtig ist. Da ich aber glaube das es der richtige Weg ist frage ich euch gleich nochmal was zu meine Abfrage.

Beziehungen:

Ich möchte folgendes Ergebnis haben:
Deutsch Info____Element1_____Element2
Peter
___…_Erde_________Luft
Wolfgang
…____Feuer________Erde

Wenn ich meine Abfrage durchlaufen lasse bekomme ich nur.
Peter____…Erde
Peter
…____Luft

Ich möchte dies aber in einer Zeile haben. So wie hier

Deutsch Info____Element1_____Element2
Peter
___…____Erde_________Luft

Ich habe irgendwie kein Ansatz wie ich an das Problem herangehen soll. Ich weiss nicht einmal ob die Beziehungen zueinander stimmen. Ich hoffe ihr könnt mir ein wenig helfen.

Außerdem wäre es hilfreich wenn mir einer verraten könnte ob und wie man hier tabellen erstellt mit [table] funktioniert es irgendwie nicht :slight_smile: .

Danke für eure Zeit

Michael

Wenn ich Dich recht verstehe hast Du:

test=*# \d personen;
   Table "public.personen"
 Column |  Type   | Modifiers
--------+---------+-----------
 id     | integer | not null
 e1     | integer |
 e2     | integer |
Indexes:
    "personen_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "personen_e1_fkey" FOREIGN KEY (e1) REFERENCES elemente(id)
    "personen_e2_fkey" FOREIGN KEY (e2) REFERENCES elemente(id)

test=*# \d elemente
   Table "public.elemente"
 Column |  Type   | Modifiers
--------+---------+-----------
 id     | integer | not null
 name   | text    |
Indexes:
    "elemente_pkey" PRIMARY KEY, btree (id)
Referenced by:
    TABLE "personen" CONSTRAINT "personen_e1_fkey" FOREIGN KEY (e1) REFERENCES elemente(id)
    TABLE "personen" CONSTRAINT "personen_e2_fkey" FOREIGN KEY (e2) REFERENCES elemente(id)

test=*# select * from personen ;
 id | e1 | e2
----+----+----
  1 |  2 |  3
(1 row)

test=*# select * from elemente ;
 id | name
----+-------
  1 | erde
  2 | luft
  3 | feuer
(3 rows)

und suchst

test=*# select p.id, e1.name, e2.name from personen p left join elemente e1 on p.e1=e1.id left join elemente e2 on p.e2=e2.id;
 id | name | name
----+------+-------
  1 | luft | feuer
(1 row)



Außerdem wäre es hilfreich wenn mir einer verraten könnte ob und wie man hier tabellen erstellt mit [table] funktioniert es irgendwie nicht > :slight_smile: > .

Danke für eure Zeit

Michael

https://www.pg-forum.de/faq.php?mode=bbcode