Hi!
Nun kommen wir an ein ganz anderes Problem. Mein Script hat anscheinend nicht die Rechte, Tabellen zu erstellen bzw. zu löschen :-(
Das Script hat sowieso keine Rechte sondern der Benutzer, den du beim Connect angegeben hast. Wenn du nur den einen hast, wäre das fatal, denn mit welchem sonst legst du Tabellen an? Wenn du einen Nur-Lese-Benutzer hast, solltest du klären, ob der nicht auch das Recht CREATE TEMPORARY TABLE bekommen kann.
Das bedeutet einserseits, dass ich mich nun doch mit dem Subselect beschäftigen muss, andererseits aber auch, dass ich mir in Sachen tmp-Tabelle was anderes einfallen lassen muss, als die temporäre Tabelle mit den Monaten.
Da fällt mir nur eine umständliche Variante ein:
SELECT 1 AS month
UNION
SELECT 2
UNION
SELECT 3
...
Punkt Subselect fällt mir schwer, ich scheine mit den Teilen auf Kriegsfuß zu stehen.
Versteh ich nicht. Es ist doch lediglich der Name einer Tabelle durch das Subselect auszutauschen und ein Aliasname hinten dranzuhängen, wenn noch keiner da ist. Versuch doch mal konkret auf den Punkt zu bringen, wo genau dir noch Verständnis fehlt.
Der andere Punkt ist deutlich einfacher, da lege ich eine Tabelle an, die eben immer bleibt und mein Script muss dafür sorgen, dass immer die letzten 12 Monate drin stehen.
Also hast du ja einen Benutzer, der Tabellen anlegen kann. Und der kann keine temporären Tabellen anlegen?
Wie auch immer, es ist jedenfalls ungünstig mit einer festen Tabelle zu arbeiten, denn die kann von mehreren gleichzeitig verwendet werden. Da muss dann konkurrierender Zugriff abgesichert werden. Die Temp-Tabelle hat das Problem nicht, weil sie nur für die Verbindung des Client existiert, der sie angelegt hat. Es ist einfacher, das Recht zu besorgen, als diesen Workaround sicher zu gestalten.
Andererseits ändern sich die Zahlen von 1 bis 12 nie. Du müsstest als Verknüpfungsbedingung nur mit der Monatsnummer arbeiten und nicht noch das Jahr mit hinzunehmen. Das geht jedoch nur, wenn mindestens der aktuelle angefangene Monat oder der vom Vorjahr ausgeschlossen wird.
Lo!