Left Join, Inner Join oder doch Full Outer Join

exzel

SQL-Guru
Beiträge
170
Hallo zusammen,

in einer Vertragstabelle gibt es drei zu erfassende Personen. Den Vertragsinhaber, die versicherte Person und den Beitragszahler. Pflichtfeld ist aber nur der Vertragsinhaber.

Die Personen sind alle in einer gesonderten Personentabelle erfasst und die Verträge in einer Vertragstabelle. Die Personen in der Vertragstabelle sind über Fremdschlüssel mit der Personentabelle verknüpft.

Nun zu meiner Frage. Angenommen es ist nur der Vertragsinhaber im Vertrag hinterlegt aber nicht der Beitragszahler und die versicherte Person. Damit bei einem Join alle Felder dennoch angezeigt werden benötigt es einen Full Outer Join, richtig?

Gruß und Dank

Alex
 
Werbung:
Hallo zusammen,

in einer Vertragstabelle gibt es drei zu erfassende Personen. Den Vertragsinhaber, die versicherte Person und den Beitragszahler. Pflichtfeld ist aber nur der Vertragsinhaber.

Die Personen sind alle in einer gesonderten Personentabelle erfasst und die Verträge in einer Vertragstabelle. Die Personen in der Vertragstabelle sind über Fremdschlüssel mit der Personentabelle verknüpft.

Nun zu meiner Frage. Angenommen es ist nur der Vertragsinhaber im Vertrag hinterlegt aber nicht der Beitragszahler und die versicherte Person. Damit bei einem Join alle Felder dennoch angezeigt werden benötigt es einen Full Outer Join, richtig?

Gruß und Dank

Alex

Wenn ich Dich richtig verstehe brauchst Du einen Left outer join. Und diesen 3 mal.
 
Hallo und danke für die Antwort!

Wunderbar. Frage beantwortet und mysql kann keine Outer Join. Aber wieder was gelernt.

Gruß
 
mysql kann keine Outer Join.

Wieder was gelernt.

Code:
MySQL [db]> create table master (id int primary key) engine innodb;
Query OK, 0 rows affected (0.18 sec)

MySQL [db]> create table slave (i int references master) engine innodb;
Query OK, 0 rows affected (0.14 sec)

MySQL [db]> select * from master left outer join slave on master.id=slave.i;
Empty set (0.04 sec)
[/code[
 
Das Problem sollte eigentlich mit einen LEFT (OUTER) JOIN zu lösen sein. Er will doch nicht alle Personen anzeigen die nicht als Vertragsinhaber angegeben sind, oder doch?
 
Entschuldigt bitte die späte Rückmeldung! Ich möchte alle Verträge anzeigen inkl. der zugehörigen Personen. Wie gesagt, das einzige Pflichtfeld ist der Vertragsinhaber. Ein Left Join wäre hier wohl richtig.

Ich verwechselte Left Outer Join mit Full Outer Join. Deshalb sagte ich mysql könne keine Outer Joins. Ein Left Outer Join ist aber das selbe wie ein Left Join, richtig?

Gruß
 
Ja ist das Selbe. Du wirst drei LEFT JOINs brauchen, in etwa so:
Code:
SELECT    v.*,
        p1.name AS vertragsinhaber,
        p2.name AS versicherter,
        p3.name AS beitragszahler
FROM    vertraege v
LEFT JOIN personen p1 ON v.inhaber_fk = p1.pk
LEFT JOIN personen p2 ON v.versicherter_fk = p2.pk
LEFT JOIN personen p3 ON v.beitragszahler_fk = p3.pk
Alternativ geht auch sowas hier:
Code:
SELECT    v.*,
        p1.name AS vertragsinhaber,
        (    CASE
            WHEN    p2.name IS NOT NULL
            THEN    p2.name
            ELSE    p1.name
            END ) AS versicherter,
        (    CASE
            WHEN    p3.name IS NOT NULL
            THEN    p3.name
            ELSE    p1.name
            END ) AS beitragszahler
FROM    vertraege v
LEFT JOIN personen p1
ON        v.inhaber_fk = p1.pk
LEFT JOIN personen p2
ON        v.versicherter_fk = p2.pk
LEFT JOIN personen p3
ON        v.beitragszahler_fk = p3.pk
 
Werbung:
Zurück
Oben