Daniela Koller: Join

Beitrag lesen

Hi paschef, sohail

wenn's Dir nur um die Buchstaben geht, und der Rest dahinter nicht wichtig ist, dann probiere GROUP BY (ungetestet...)

SELECT          UPPER(Substring(Branchen.Branche,1,1)),
                Branchen.BranchenID,
                ShopBranchen.BranchenID,
                ShopBranchen.ShopID,
                ArtikelListe.ShopID,
                ArtikelListe.LKZ
       FROM     Branchen,ShopBranchen,ArtikelListe
       WHERE    Branchen.BranchenID = ShopBranchen.BranchenID
       AND      ShopBranchen.ShopID = ArtikelListe.ShopID
       AND      ArtikelListe.LKZ <> -1
       ORDER BY UPPER(Substring(Branchen.Branche,1,1))
       GROUP BY UPPER(Substring(Branchen.Branche,1,1))

Bitte nicht! Das ist sehr sehr MySQL proprietär und entspricht nicht
der Logik hinter Group by (von der Performance mal ganz zu schweigen).
Group by ist für Aggregatsfunktionen gedacht, also zb ein max
soll über alle Spalten von Group By gezogen werden. Ausserdem müssen
alle Spalten die nicht Aggregatsfunktionen sind in dem Group by stehen.
Andere Datenbanken geben dir da sogar Syntaxfehler aus, MySQL nimmt
dir für die restlichen Spalten einfach mehr oder weniger zufällig
Werte aus den Records die zusammengefasst werden sollen (woher sollte
es auch wissen welche davon du willst wenn sie verschieden sind).

Zudem käme Group By vor den Order By.

Wenn du die Spalten einfach nur im Where ansprechen willst, brauchst
du sie auch nicht im Select anzugeben, da soll nur das hin was du
als Output willst. Innerhalb der Query sind alle Spalten der angesprochenen
Tabellen verfügbar, sie müssen einfach qualifiziert, dh mit Tabellennamen,
angesprochen werden. Ausnahme davon sind Having, Group By und Order By
weil die auf dem Result arbeiten. Da wird dann erst der Rest der
Query ausgeführt und die Resultatetabelle noch gefiltert ohne Indexe
und alles, deswegen auch langsamer.

Gruss Daniela