dedlfix: Aliase für mysql-Feldnamen in DB möglich?

Beitrag lesen

Tach!

In der Tabelle medien muss das Feld "adress_id" aber in "registrierte_id" geändert werden. Wenn ich das ohne Alias mache, funktionieren die SELECTS nicht mehr.

Die Reihenfolge der Klausel-Abarbeitung ist wichtig für das WWissen, wann man Aliase einsetzen kann. Diese Reihenfolge entspricht im Wesentlichen der Reihenfolge, wie die Klausel notiert werden müssen. Die Auswertung der SELECT-Klausel kommt aber erst zwischen GROUP BY und HAVING an die Reihe. Das heißt, vorher kann man keine Aliase verwenden, nachher schon. Also WHERE kann nicht mit den Aliasen im SELECT umgehen, aber HAVING und ORDER BY können das. Es ist nun allerdings nicht empfehlenswert, alles WHERE auf HAVING umzuschreiben. WHERE ist dafür da, die Datenmenge einzuschränken, die dann im SELECT-Teil berechnet werden muss. Lässt man erst die Ausdrücke im SELECT berechnen, macht das MySQL unter Umständen (wenn es der Optimizer nicht besser geregelt bekommt) für die gesamte Tabelle. Das will man nicht, besonders nicht dann, wenn das WHERE eine Menge Datensätzt weggekürzt hätte.

Welchen Ausweg gibt es? Datenbanken sind so wunderbar variabel, aber hier beisst man auf Granit?

Die Aliase im SELECT-Teil nur dafür verwenden, wie die Namen später im abfragenden Programm aussehen sollen und die WHERE-Klausel mit den alten Namen belassen oder auf umbenannte Feldnamen anpassen.

dedlfix.