View's SELECT contains a subquery in the FROM clause
Aus Salber.net
Inhaltsverzeichnis |
Problem
Das ist eine Fehlermeldung (Fehlercode 134) von MySQL (zumindest Version 5.1.37), wenn man versucht etwas von dieser Form auszuführen:
CREATE VIEW TestView AS SELECT a.id FROM (SELECT 1 AS id) a
Darüber bin ich selbst erst kürzlich gestolpert. Interessant ist, dass das entsprechende SELECT-Statement ohne Probleme läuft:
SELECT a.id FROM (SELECT 1 AS id) a
Lösungsmöglichkeiten
Um den Fehler zu umgehen gibt es derzeit (nur?) die drei Möglichkeiten die Abfrage anders zu formulieren, MySQL zu patchen oder ein anderes DBMS (Datenbank-Management-System) zu verwenden.
Abfrage umformulieren
Das ist sicher die einfachste Möglichkeit. Was immer funktionieren sollte, aber aufwändig werden kann, ist eine eigene View für die Unterabfrage zu erstellen…
CREATE VIEW TestViewSubquery AS SELECT 1 AS id
…und dann die eigentliche View umzuschreiben zu
CREATE VIEW TestView AS SELECT a.id FROM TestViewSubquery a
MySQL patchen
Dazu hat Eric Bergen hier etwas am 17.8.2009 geschrieben. Ich hab das nicht ausprobiert, aber ich schätze, dass es funktionieren sollte.
Anderes DBMS verwenden
Ich werde mir mal PostgreSQL anschauen…
Weitere Informationen
Warum das so ist, weiß ich nicht. Es wird aber schön brav in der Dokumentation unter 12.1.20. CREATE VIEW Syntax (obere Hälfte) und D.4. Restrictions on Views gelistet (4. Absatz). Es existiert auch ein Bug-Report bzw. Feature request (Bug #12755) der seit 2005(!) nicht mehr angefasst wurde.