# LEFT JOIN id hat Null



## OnDemand (24. Jul 2014)

Hallo zusammen,

bestimmt ein typischer Anfängerfehler. Warum sind manche Schlüssel "null"? Eigentlich haben sie Werte.


```
SELECT a.id AngestelltenPrimär, p.id PersonenPrimär, p.nachname Nachname, p.vorname Vorname, p.ort Ort
FROM personen p
LEFT JOIN(angestellte a) ON(a.id = p.id)
WHERE vorname = 'john'
```


----------



## JavaMeister (24. Jul 2014)

Weil du von a die Id ausgibst und dazu kein treffer in der gejointe tabelle existiert.


----------



## OnDemand (24. Jul 2014)

Daanke, hab mich da irgendwie verzettelt mit den ganzen IDs

Du kannst mir doch auch bestimmt sagen (wenn du möchtest ), warum folgender Code so nicht funktioniert, aber mit GROUP BY und HAVING COUNT() funktioniert.

```
SELECT name FROM angestellte
ORDER BY name
WHERE COUNT(name)>1
```

Liegt das daran, weil in WHERE-Klauseln keine Standardfunktionen ausgeführt werden können, sondern nur Bedingungen geprüft werden können?


----------



## OnDemand (24. Jul 2014)

....deine Antwort passt nicht zur Frage..
Hab dich mal sicherheitshalber gemeldet, entweder wurde hier ein Account gehacked ?! oder im Idealfall ein Ding an der Waffel.


----------



## ceving (25. Jul 2014)

NicoDeluxe hat gesagt.:


> Hallo zusammen,
> 
> bestimmt ein typischer Anfängerfehler. Warum sind manche Schlüssel "null"? Eigentlich haben sie Werte.
> 
> ...



Wenn du einen Left-Join von Personen auf Angestellte machst, wäre es sinnvoller, wenn du dir zuerst (also links) die Personen-Id und daneben die Id von den Angestellten anzeigen lassen würdest. Dann wäre die Sache klar. So funktioniert nämlich ein Left-Join. Wenn das nicht klar sein sollte, solltest du nochmal nachlesen was ein Left-Join ist.

Wenn in deiner Ausgabe keine Nulls sein dürfen machst du entweder die falsche Abfrage oder deine Daten sind Schrott. Wenn die Daten nicht Schrott sind, musst du einen Inner-Join machen, um nur die Datensätze zu sehen, bei denen die Relation erfüllt ist.


----------



## OnDemand (25. Jul 2014)

Hallo ceving,

meinst du mit "zuerst personen id und daneben angestellten id" Die Anweisung in ON() ?
Wenn ich die ID tausche klappt vielen Dank für den Hinweis. Muss mich da nochmal belesen.

Verstehe ich das richtig:

Left Join verknüpft die linke Tabelle mit der in den Klammern, demzufolge muss die "Reihenfolge" der Werte in ON auch entsprechend passen?

Und: Kannst du mir die Frage beantworten (vorheriger Beitrag)


> ..
> Warum folgender Code so nicht funktioniert, aber mit GROUP BY und HAVING COUNT() funktioniert.
> 
> 
> ...


----------



## ceving (26. Jul 2014)

NicoDeluxe hat gesagt.:


> Verstehe ich das richtig:
> 
> Left Join verknüpft die linke Tabelle mit der in den Klammern, demzufolge muss die "Reihenfolge" der Werte in ON auch entsprechend passen?



Nein ich meine die Reihenfolge im Select und dementsprechent die Reihenfolge in deiner Ergebnis-Liste. Wenn die Reihenfolgen zu einander passen, liefert ein Left-Join auf der rechten Seite die Nulls.


----------

