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
Libérer: 2025-01-08 09:07:44
original
211 Les gens l'ont consulté

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 :

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;
Copier après la connexion

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

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;
Copier après la connexion

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

SELECT UserName
FROM v_users_sent_over_3;
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal