JOIN Frage

Microhome

Erfahrenes Mitglied
Hallo zusammen,

ich möchte gern drei Tabellen miteinander verknüpfen und hierfür folgendes Beispiel nennen:

Tabelle 1: Person
Spalten: ID, Name, Vorname, Geschlecht
Beispiel:
21, Krüger, Jana, w
24, Müller, Mark, m

Tabelle 2: Frauen
Spalten: ID, PID, Haarfarbe, Schuhmarke, Parfüm
Beispiel: 12, 21, blond, Guess, PRADA Amber

Tabelle 3: Maenner
Spalten: ID, PID, Auto, Beruf, Lieblingssport
Beispiel: 4, 24, VW, Designer, Tennis


Mein Vorhaben ist nun, diese Tabellen miteinander zu verknüpfen bzw. Tabelle 1 (Person) jeweils mit der Tabelle Frauen bzw. mit der Tabelle Männer zu verbinden.

Im Moment mache ich das folgendermaßen:

SQL:
SELECT *
FROM personen p
LEFT JOIN frauen f ON f.pid = p.id
LEFT JOIN maenner m ON m.pid = p.id


Das Problem ist, dass ich pro Zeile eben auch alle NULL Felder ausgegeben bekomme, was ich verhindern möchte. Dh. es soll entweder automatisch in der SQL Query zu der jeweils richtigen Tabelle gejoint, oder aber die NULL Einträge nicht mit ausgegeben werden.


Habt ihr einen Vorschlag? Sicher wäre eine Möglichkeit die Verwendung von UNION, aber ist das die einzige?




Vielen Dank für eure Hilfe und ich freue mich auf Vorschläge!
 
Zuletzt bearbeitet von einem Moderator:
item: Hier ist sicher etwas falsc:h LEFT JOIN maenner m ON m.pid = m.id. Das ollte sicher p.id und nicht m.id sein.

Wie soll denn die Ausgabe aussehen?
 
Hallo Yaslaw,

danke dir erstmal für's SQL-Taggen. Den Fehler habe ich behoben, ja. Es muss natürlich "p.id" heißen.

Die Frage nach der Ausgabe ist eine wirklich gute, denn prinzipiell geht es gar nicht anders, als alle Tabellen mittels JOIN zu verknüpfen, da die Spaltennamen ja jeweils verschieden sind, richtig?
 
Nein, muss nicht sein. Kommt ganz drauf an wie dide Ausgabe aussehen soll.
Mit UNION gehts glaub nicht, weil du versch. Felder hast.

An diener Stelle würde ich das ganze mal zuerst normalisieren
 
Ähm, was ist denn in diesem Fall nicht normalisiert?
Scheinbar mache ich es wohl am einfachsten über zwei separate Abfragen, je nachdem, welches Geschlecht der jeweilige Eintrag hat.
 
Naja, die Spalten mit den Eigenschaften 'Parfüm', 'Sport' etc. macht man normalerweise flexibel Untereinander und dann mit einer 1:n-Beziehung verknüpfen.

Deine Abfrage stimmt ja schon. Ich meine bei einem Mann sind nun mal alle Frauenfelder NULL. Was willst du dort anderes haben?
 
Ich muss noch mal die UNION-Idee aufgreifen.
Das müsste doch funktionieren, wenn du die Felder im Select gleich benennst und hier die Daten konvertierst (müsste mit CAST gehen)
 
Stimmt. Macht nicht viel Sinn.
Aber die Frage war ja, ob es noch mehr Möglichkeiten gibt. Es steht nix davon, ob das logisch sein soll :)
 

Neue Beiträge

Zurück