Join ohne gemeinsame Fremdschlüssel

gamma_matrices

Cadet 4th Year
Registriert
Sep. 2018
Beiträge
121
Hallo,
wie kann ich 2 Kinder Tabellen (t1 und t2) die an einer Elternrabelle T0 hängen, beide miteinander verknüpfen, wenn sie keinen gemeinsamen Schlüssel besitzen?
Danke im voraus!
 
Ergo muss die Eltern-Tabelle, an der beide hängen, beim JOIN mit beteiligt sein.
 
  • Gefällt mir
Reaktionen: Raijin
Würde ich doch gerne machen, damit ich die Kids irgendwie in Verbindung setzen kann. Kann man alle 3 zusammen sinnvoll joinen? 🤔
 
Ich verstehe die Frage nicht. 😅

Die joinst die jeweilige Kind-Tabelle mit dem passenden Fremdschlüssel der Eltern-Tabelle. Fertig.
 
Kann ich sowas machen wie?:
SQL:
select bla bla
from kind1 k1 join eltern e on
... join kind2 k2 on ...;
 
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:
idnamemumdad
1chantal34
2kevin36
3patricia57
4hansnullnull
5peternullnull
6carlanullnull
7fritznullnull

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 ....
 
Zurück
Oben