Zum Join braucht man immer eine Bedingung. Und die ist üblicherweise (allerdings nicht notwendigerweise) ein Fremdschlüssel.
In diesem konkreten Fall sei angemerkt daß es, wenn wirklich es ELTERN KIND Relationen sind, daß es dann üblicherweise nur eine einzige Tabelle gibt, außer man hat mehr zu modellieren und die "Person" mit Rolle "Elternteil" unterscheidet sich im Sinne der Datenbank ausreichend von der Person mit rolle "Kind".
Ansonsten:
id | name | mum | dad |
---|
1 | chantal | 3 | 4 |
2 | kevin | 3 | 6 |
3 | patricia | 5 | 7 |
4 | hans | null | null |
5 | peter | null | null |
6 | carla | null | null |
7 | fritz | null | null |
Das ist natürlich vereinfacht, aber man sieht gleich, Chantal und Kevin sind Halbgeschwister. Wenn man das wollen würde könnte man auch für die Eltern noch die Eltern eintragen usw. Außerdem wurde konkret für diese Relation berücksichtigt, daß "mum" nicht unbedingt wirklich eine Frau sein muß.
Für die Auflösung dann common table expressions (CTE) wenn es um die Vorfahren geht. Ansonsten selfjoin wobei die Spalten
mum
und
dad
jeweils foreign keys sind auf die Spalte
id
(welche Primärschlüssel ist).
In allen anderen Fällen, wenn es einfach nur um eine
m x n
Relation gehen sollte, immer einen
INNER JOIN
mit der Zuordnungstabelle in der Mitte, also
SQL:
SELECT a.name, a.vorname, v.name Vorlesung_name
FROM studenten a
JOIN student_vorlesung sv ON a.matrikel_id = sv.matrikel
JOIN Vorlesung v ON v.id = sv.vorlesung
WHERE ....