Philipp Hasenfratz: Query an mehrere Tabellen

Beitrag lesen

Halihallo Ilja

Dann wird 1 nicht mehr als internes Attributalias, sondern als Zahl
eines algebraischen Ausdrucks gewertet. Soweit zumindest meine
Vermutung und Schlüsse aus meiner Beobachtung.

wenn ich das mit den ganzzahlen richtig verstanden habe, sollten die immer einen bezug auf die spalten nach dem SELECT haben, ganz ähnlich der syntax mit ORDER BY, sprich die 1 für die erste spalte, 2 für die zweite etc. insofern sollte es eigentlich immer als ein "zahlen-alias" stehen.

Theoretisch ja. Praktisch haben meine Erfahrungen andere Schlüsse
ergeben. Ich halte es allgemein für inkorrekt, wenn Zahlen als
Attribut-Alias genommen werden (falls diese nicht explizit durch den
Benutzer definiert werden), da diese eben eine duale Bedeutung haben:
Zum einen sind es Zahlen, zum anderen Variablen/Attributwerte und
somit lässt sich schwer eine Syntax definieren, so dass die Semantik
klar ist.

insofern werde ich noch nicht ganz schlau draus, was dort ein 1+1 bewirkt. meiner meinung würde das die spalte 2 als alias ansprechen sollen...

Entweder so, oder es wird der Attributwert des ersten Attributs mit
sich selber addiert... Es ist wie gesagt semantisch nicht eindeutig.
Soweit ich es aufgrund meiner Beobachtungen deute, wird 1+1 als
algebraischer Ausdruck mit *Zahlen* gedeutet. 1 steht hier also für
eine nummerische Zahl und nicht ein Attributwert... Glaub mir, ich
werde auch nicht schlau daraus :-)

Obwohl, dass was MySQL in diesem Zusammenhang macht, grenzt schon
fast an schwarze Magie

nun, ich bin wirklich kein abergläubiger mensch. aber mich wundert das noch in einem anderen zusammenhang.

<zitat mysql doku>
Wenn Sie in einem Statement eine Gruppierungsfunktion benutzen, die keine GROUP BY-Klausel enthält, ist das gleichbedeutend mit der Gruppierung aller Zeilen.
<zitat ende>

das an sich ist keine überraschung, vielmehr bin ich davon ausgegangen. wird kein group by angebeben und die aggregat-funktion count(*) benutzt, dann handelt es sich a) um eine gruppierung über die gesamte tabelle und b) wird der wert 0 zurückgegeben, wenn die tabelle leer ist.

Jep.

benutzt man aber nun explizit ein group by, dann wird bei einer leeren ergebnistabelle keine wert bei count(*) zurück gegeben. das hat mich doch bei dem obigen zitat verwundert.

Hm. Das ist richtig. Die Funktionsweise ist hier anscheinend nicht
genau so umgesetzt, wie in der Doku beschrieben. IMHO ist die
korrekte Umsetzung jene in der Doku und die "SELECT COUNT(*) FROM t
GROUP BY constant-value"-Umsetzung (die, die ich auch schon
vorgeschlagen habe und eben für eine Gruppierung der ganzen Relation
führt) von MySQL bei leerer Relation t "fehlerhaft".

Viele Grüsse

Philipp