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!