dedlfix: Probleme mit left join, bekomme zu viele Ergebnisse

Beitrag lesen

Tach!

in der einen Tabelle (1) habe ich die Städte, in der anderen Tabelle (2) sind Daten zu den Städten (auch mehrere pro Stadt) Jetzt rufe ich die erste Tabelle auf mit allen Stadtnamen und lese mittels LEFT JOIN die letzten Einträge zu den Städten ein.

SELECT a.url, b.neu_time FROM city a
 LEFT JOIN datensatz b ON a.stadt = b.stadt ORDER BY b.neu_time DESC

Es gibt eine Reihenfolge, in der die einzelnen Klauseln eines SQL-Statements abgearbeitet werden. Das Join findet vor dem Order By statt. Das heißt, es entsteht zuerst ein kartesiches Produkt aus den beiden Tabellen und das wird dann nur noch sortiert.

ABER… es werden alle Datensätze aus der Tabelle 2 ausgeben, es sollten aber nur die Datensätze aus der Tabelle 1 zuzüglich der 2 ausgegeben werden. (und nicht anders rum)

In dem Fall musst du die Daten der zweiten Tabelle soweit einschränken, wie du sie haben möchtest, bevor das Join wirkt.

Formuliere zunächst eine Query auf die zweite Tabelle, die nur einen Datensatz pro Stadt ergibt. Dazu wirst du sicher über die Stadt gruppieren müssen und dabei eine Aggregatfunktion nehmen, die dir "letzter Eintrag" ermittelt, also vermutlich MAX(neu_time).

Wenn diese Query soweit steht, kannst du sie als Subselect im Join verwenden.

dedlfix.