2016-05-29 11 views
1

Ich habe zwei Tabellen, eine mit Städten (ID und Stadt Name) und eine mit Bildern der Städte (city_id, etc).SQL Links Join gibt nur eine Zeile statt viele

Nehmen wir an, ich suche die Stadt namens Sibiu. Das sollte 3 Ergebnisse zurückgeben, da es mehr Städte in der Tabelle gibt (Miercurea Sibiului, Sibiu, Poiana Sibiului), aber es gibt nur einen zurück.

Auch als eine Anmerkung, die timeline_elements hat noch keine Bilder von der Stadt.

SELECT cities_countries.*, COUNT(timeline_elements.city_id) as number_of_photos 
FROM cities_countries 
LEFT JOIN timeline_elements on (cities_countries.id = timeline_elements.city_id) 
WHERE cities_countries.name LIKE '%Sibiu%' 

Antwort

1

In der GROUP BY und auch ausdrücklich alle Spaltennamen für die cities_countries Tabelle erwähnen. Ich denke, das sind die Spalten in der cities_countries Tabelle. id, city_id, city_name.

Auch Alias-Namen für jede Tabelle für die bessere Lesbarkeit festlegen.

SELECT C.id, C.city_id, C.city_name, .... 
     , COUNT(T.city_id) as number_of_photos 
FROM cities_countries C 
LEFT JOIN timeline_elements T ON C.id = T.city_id 
WHERE C.name LIKE '%Sibiu%' 
GROUP BY C.id, C.city_id, C.city_name, .... 
+0

Dies funktionierte, aber ich verstehe nicht, was ich falsch gemacht habe. Könnten Sie sich etwas Zeit nehmen, um das zu erklären? Vielen Dank – SimeriaIonut

+0

@SimeriaIonut [Aggregatfunktionen] (https://msdn.microsoft.com/en-IN/library/ms173454.aspx) führen Sie die Berechnung durch und geben Sie einen einzelnen Wert zurück, wenn Sie die verbleibenden Spalten, die Sie benötigen, zurückgeben möchten Fügen Sie die GROUP BY hinzu. Daher müssen die Spalten, die Sie in SELECT erwähnt haben, in GROUP BY mit Ausnahme des Aggregatsspaltennamens enthalten sein – Arulkumar