sql de base : sélection de la même colonne plusieurs fois dans une même requête, lors de chaque occurrence dépend de différents clause where
Quelle est la meilleure façon d'effectuer cette requête. J'ai le tableau suivant
mytable avec des colonnes
x y
1 a
2 b
3 c
et je voudrais (en pseudo-sql)
select x as x1 ,x as x2, x as x3 from mytable where ????
quand
x1 is x where y=a
x2 is x where y=b
x3 is x where y=c
je voudrais donc, en conséquence
1, 2, 3
Je suis actuellement en utilisant la cte est et et un très vaste ensemble de données, je suis en train de réduire la durée de la requête, est-il toujours nécessaire d'avoir 3 table des scans ?
Toutes mes excuses, mais je trouve la question de la confusion. Pouvez-vous ajouter des exemples de données et ce que vous pensez du résultat de l'instruction select doit être? Merci.
s'il vous plaît, pouvez-vous donner une explication plus claire ? je n'y comprends rien à votre question
s'il vous plaît, pouvez-vous donner une explication plus claire ? je n'y comprends rien à votre question
OriginalL'auteur NimChimpsky | 2010-11-04
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser 3 requêtes. Il sera beaucoup plus rapide avec une bonne indexation lors de l'auto-jointures. En outre, il sera plus lisible.
Si vous souhaitez une requête d'appel, il pourrait être présent 🙂
oui, c'est fait. La solution avec un seul balayage de table exigera de la logique supplémentaire dans votre application
J'ai un très vaste ensemble de données, et ce qui doit être fait sept fois, il n'y a pas d'autres options ?
"la solution avec une seule table de balayage prendra de la logique supplémentaire dans votre application" , hein ?
J'ai ajouté une autre réponse. Espérons que cela va faire. Quelle est la langue que vous utilisez dans votre application?
OriginalL'auteur Silver Light
Je voudrais faire ceci :
Peu plus facile à comprendre, et de sortir plus d'info si vous avez besoin de plusieurs colonnes de chaque ligne
OriginalL'auteur aqm
Dans l'exemple donné, il y a seulement 3 lignes d'entrée et une ligne de sortie. Je suppose qu'il va y avoir au moins une autre colonne concernée, telles que des données d'entrée:
est de devenir de sortie:
Cela peut être fait en une seule passe à l'aide d'une requête comme:
OriginalL'auteur
Une autre solution:
Vous aurez un ensemble de résultats:
Ce résultat peut ensuite être utilisé dans une demande pour obtenir le résultat désiré.
OriginalL'auteur Silver Light
De votre question, il apparaît à vous comme la dernière des trois instances de l'état, ou la cravate trois conditions différentes ensemble. Serait l'exemple suivant satisfaire votre question:
Permet de dire que nous ne voulons que les étudiants qui ont trois cours (gen101, cmp202, et psy303) et de montrer à ces sortes d'ignorer quelqu'un d'autre.
Cela devrait donner une ligne:
Espère que vous donne assez de travailler.
OriginalL'auteur PatrickP61
Eh bien, puis être plus précis.
OriginalL'auteur dotariel
Ma recommandation serait de sélectionner les résultats commandés ou regroupés par colonne y et l'utilisation de cette information pour diviser le jeu de résultats dans plusieurs listes pour une application à traiter. Si vous souhaitez faire uniquement dans la base de données j'ai peur de multiples analyses de la table (ou joint) sont nécessaires.
Une autre solution est de migrer les informations dans la colonne y à une autre table (avec une référence de clé étrangère), pour être en mesure de rejoindre plus efficacement.
OriginalL'auteur SilverSkin
SQL Violon
MySQL 5.5.32 Schéma D'Installation:
Requête 1:
Résultats:
OriginalL'auteur Fabien TheSolution