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