Limitation de vue pré-MySQL 5.1 : sous-requêtes dans la clause FROM
Dans les versions antérieures à MySQL 5.1, si la clause FROM de la vue contient une sous-requête, une erreur sera signalée. Cette limitation réduit la flexibilité dans la création de requêtes de base de données.
Cause profonde
Historiquement, le moteur MySQL manquait d'implémentation pour gérer les sous-requêtes dans la clause FROM des vues. Cela est principalement dû à la complexité du moteur et à des problèmes de performances.
Solution
Pour contourner cette limitation, vous pouvez utiliser les méthodes suivantes :
Exemple de solution
Considérons 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>
Une solution de contournement possible en utilisant une table dérivée :
<code class="language-sql">SELECT dt.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 ) dt</code>
Limitation des requêtes
Bien que la solution de contournement ci-dessus couvre la plupart des scénarios, il existe certains cas particuliers où une sous-requête dans la clause FROM peut être essentielle. Il n'existe pas de solution directe pour ce type de requête dans les versions antérieures à MySQL 5.1.
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!