dedlfix: Left Join und groupierung führt zu verfälschten Ergebniss

Beitrag lesen

Tach!

$sql = "SELECT a.id, a.name, b.text FROM table1 a LEFT JOIN table2 b ON a.id=b.id ORDER by a.id DESC Limit 20 ";

Deine PHP-Variablen-Zuweisung führt dazu, dass die Syntaxhervorhebung für SQL nicht richtig arbeiten kann. Außerden ist PHP-Code völlig unwichtig für dein Problem, also zeige bitte nur das reine Statement und nichts was da aus anderen Gründen noch drumherum geschrieben ist.

Wenn ich
SELECT a.id, a.name, b.text FROM table1 a LEFT JOIN table2 b ON a.id=b.id GROUP BY b.id ORDER by a.id DESC Limit 20
ausführe kommmt

... unter MySQL für deine Spalten aus der SELECT-Klausel ein Wert aus irgendeinem zufällig ausgewählten Datensatz. Andere DBMSs lassen nur die Werte in der SELECT-Klausel zu, nach denen gruppiert wurde, zuzüglich Aggregatfunktionen.

andreas dddddddddd
carmen ggggggggggg

Außerdem kommt noch bernd (oder detlef) mit NULL als Text. Deren b.ID ist aufgrund des Left Join und des Nichtvorhandenseins von Datensätzen in der zweiten Tabelle nämlich NULL, wodurch deren Datensätze zu einem zusammengefasst werden. b.id ist also kein sinnvolles Gruppierkriterium

Selektiere die Werte aus der ersten Tabelle und hol dir das relevante Feld aus der zweiten mittels einer korrelierten Unterabfrage (correlated subselect). Wenn es mehr als ein Feld sein soll, so erstelle zunächst eine Abfrage, die die relevanten Werte aus der zweiten Tabelle liefert, ohne die erste zu berücksichtigen. Diese Abfrage kannst du dann als Unterabfrage in der FROM-Klausel der ersten Abfrage einfügen und entsprechend joinen.

dedlfix.