Maison >base de données >tutoriel mysql >Vues MySQL et sous-requêtes dans la clause FROM : comment surmonter la limitation 5.0 ?

Vues MySQL et sous-requêtes dans la clause FROM : comment surmonter la limitation 5.0 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-08 09:07:44138parcourir

MySQL Views and Subqueries in the FROM Clause: How to Overcome the 5.0 Limitation?

Sous-requête pour la clause FROM dans les vues MySQL 5.0 : limitations et solutions de contournement

Les utilisateurs de MySQL 5.0 peuvent rencontrer une erreur lorsqu'ils tentent de créer une vue contenant une sous-requête dans la clause FROM. Le message d'erreur est "ERREUR 1349 (HY000) : le SELECT de la vue contient une sous-requête dans la clause FROM." Créez des vues basées sur des requêtes complexes contenant des sous-requêtes.

Une solution de contournement possible consiste à créer des vues distinctes pour chaque sous-requête, puis à remplacer les sous-requêtes par ces vues dérivées. Prenons l'exemple de requête suivant :

<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>

Pour contourner cette limitation, une vue peut être créée pour les deux sous-requêtes :

<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>

Dans la requête d'origine, remplacez la sous-requête par la vue dérivée :

<code class="language-sql">SELECT UserName
FROM v_users_sent_over_3;</code>

Cette approche permet de créer des vues basées sur des sous-requêtes complexes dans les versions de MySQL où existent des restrictions de sous-requêtes dans la clause FROM. Cependant, il convient de noter que toutes les sous-requêtes ne peuvent pas être exprimées sans la clause FROM. Par exemple, les sous-requêtes utilisées pour le tri ou le filtrage peuvent nécessiter d'autres méthodes, telles que l'utilisation de sous-requêtes corrélées ou de fonctions de fenêtre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn