View's SELECT contains a subquery in the FROM clause

Aus Salber.net

Wechseln zu: Navigation, Suche

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.

Persönliche Werkzeuge