Combiner plusieurs instructions SELECT sans ignorer les résultats
Dans le domaine de l'optimisation des requêtes de base de données, nous rencontrons souvent le besoin de combiner plusieurs instructions SELECT en une seule requête. Cependant, comme l'illustre l'exemple fourni, l'application d'une clause LIMIT à chaque instruction SELECT individuelle pour limiter son résultat à une seule ligne peut entraîner une perte de données.
Pour résoudre ce problème, nous devons nous assurer que l'instruction SELECT individuelle les déclarations sont placées entre parenthèses. Ce faisant, nous rendons la syntaxe de la requête plus claire et empêchons l'application de la clause LIMIT au résultat global de la requête.
Voici à quoi devrait ressembler la requête révisée :
(SELECT result FROM foo.table LIMIT 1) UNION ALL (SELECT result FROM bar.table LIMIT 1) UNION ALL (SELECT result FROM doo.table LIMIT 1)
Dans Dans cette requête révisée, chaque sous-instruction individuelle est placée entre parenthèses, garantissant que la clause LIMIT est appliquée uniquement à sa sous-requête respective. En conséquence, toutes les lignes renvoyées seront conservées, fournissant le résultat souhaité sur une colonne avec plusieurs lignes représentant les différents noms de schéma.
Il est important de noter que le manuel MySQL indique explicitement :
"select_statement est toute instruction SELECT sans clause ORDER BY, LIMIT, FOR UPDATE ou FOR SHARE. (ORDER BY et LIMIT peuvent être attachés à une sous-expression si elle est entourée parenthèses. Sans parenthèses, ces clauses seront considérées comme s'appliquant au résultat de l'UNION, et non à son expression d'entrée de droite.)"
En appliquant cette règle, nous pouvons garantir que nos requêtes sont exécutées comme prévu et qu'aucune donnée n'est involontairement supprimée.
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!