Maison >base de données >tutoriel mysql >Comment puis-je sélectionner efficacement plusieurs colonnes à partir de sous-requêtes dans MySQL ?

Comment puis-je sélectionner efficacement plusieurs colonnes à partir de sous-requêtes dans MySQL ?

DDD
DDDoriginal
2024-10-29 09:11:30569parcourir

 How Can I Efficiently Select Multiple Columns from Subqueries in MySQL?

Sélection de plusieurs colonnes à partir de sous-requêtes dans MySQL

Vous disposez d'un scénario dans lequel vous devez récupérer l'identifiant et la valeur (traduction) pour chaque attribut dans une langue spécifiée. Cependant, certains attributs peuvent ne pas avoir de traduction dans la langue donnée.

Considérations sur les performances des sous-requêtes

Une approche consiste à utiliser des sous-requêtes pour chaque colonne, comme indiqué dans votre exemple. :

select attribute, 
(select id from attributeTranslation where attribute=a.id and language=1),
(select translation from attributeTranslation where attribute=a.id and language=1), 
from attribute a;

Bien que cette approche fonctionne, elle soulève des problèmes de performances si les sous-requêtes ne peuvent pas être optimisées par MySQL.

Utilisation de tables virtuelles

Une solution plus efficace consiste à utiliser des tables virtuelles. En mettant une sous-requête entre parenthèses, nous pouvons créer une table virtuelle qui peut être jointe à d'autres tables de votre requête.

SELECT a.attr, b.id, b.trans, b.lang
FROM attribute a
JOIN (
 SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute
 FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)

Dans cet exemple, la table virtuelle b contient les colonnes d'identifiant et de traduction souhaitées du Table d'attributTranslation, jointe à la table attributaire a. Cela élimine le besoin de plusieurs sous-requêtes et améliore les performances.

Conclusion

L'utilisation de tables virtuelles vous permet de sélectionner efficacement plusieurs colonnes à partir de sous-requêtes, tout en offrant également la flexibilité de créer opérations de jointure complexes. Cette approche est particulièrement bénéfique lorsqu'il s'agit de considérations de performances.

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