Unterabfrage für FROM-Klausel in MySQL 5.0-Ansichten: Einschränkungen und Problemumgehungen
MySQL 5.0-Benutzer können auf einen Fehler stoßen, wenn sie versuchen, eine Ansicht zu erstellen, die eine Unterabfrage in der FROM-Klausel enthält. Die Fehlermeldung lautet „FEHLER 1349 (HY000): View's SELECT enthält eine Unterabfrage in der FROM-Klausel.“ Erstellen Sie Ansichten basierend auf komplexen Abfragen, die Unterabfragen enthalten.
Eine mögliche Problemumgehung besteht darin, für jede Unterabfrage separate Ansichten zu erstellen und die Unterabfragen dann durch diese abgeleiteten Ansichten zu ersetzen. Betrachten Sie die folgende Beispielabfrage:
<code class="language-sql">SELECT temp.UserName FROM ( SELECT u1.name AS UserName, COUNT(m1.UserFromId) AS SentCount FROM Message m1, User u1 WHERE u1.uid = m1.UserFromId GROUP BY u1.name HAVING SentCount > 3 ) AS temp;</code>
Um diese Einschränkung zu umgehen, kann für beide Unterabfragen eine Ansicht erstellt werden:
<code class="language-sql">CREATE VIEW v_user_sent_count AS SELECT u1.name AS UserName, COUNT(m1.UserFromId) AS SentCount FROM Message m1, User u1 WHERE u1.uid = m1.UserFromId GROUP BY u1.name; CREATE VIEW v_users_sent_over_3 AS SELECT UserName FROM v_user_sent_count WHERE SentCount > 3;</code>
Ersetzen Sie in der ursprünglichen Abfrage die Unterabfrage durch die abgeleitete Ansicht:
<code class="language-sql">SELECT UserName FROM v_users_sent_over_3;</code>
Dieser Ansatz ermöglicht das Erstellen von Ansichten basierend auf komplexen Unterabfragen in MySQL-Versionen, in denen Unterabfragebeschränkungen in der FROM-Klausel bestehen. Es ist jedoch zu beachten, dass nicht alle Unterabfragen ohne die FROM-Klausel ausgedrückt werden können. Beispielsweise erfordern Unterabfragen, die zum Sortieren oder Filtern verwendet werden, möglicherweise andere Methoden, beispielsweise die Verwendung korrelierter Unterabfragen oder Fensterfunktionen.
Das obige ist der detaillierte Inhalt vonMySQL-Ansichten und Unterabfragen in der FROM-Klausel: Wie kann die 5.0-Beschränkung überwunden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!