Y a-t-il une solution de contournement afin que je puisse réellement faire quelque chose comme ça sans avoir à répéter l'ensemble de l'expression ou forcer une table ou une table temporaire?
SELECT (complex expression) AS variable1,
(complex expression based on variable1) AS variable2
3 Réponses :
SELECT @v1:=(complex expression) AS variable1,
(complex expression * @v1) AS variable2
Je vais être horrifié si c'est simplement aussi facile et honnêtement, je ne pouvais pas le comprendre, mais merci!
Ah, tu sais quoi? La page manuelle énumérée ci-dessus par Knittl a des avertissements répétés de ne pas utiliser ou s'appuyer sur des variables définies dans la même instruction SELECT, car les champs peuvent être exécutés hors de la commande sur la base de l'endroit où, etc. et la variable est détenue à partir de l'exécution précédente. Donc, la nouvelle utilisation des variables dans le même choix est probablement une mauvaise idée, elle est destinée à des requêtes séquentielles.
Personnellement, je n'ai jamais vu le comportement averti dans le manuel, même après avoir essayé de le faire arriver. Mais si le manuel met en garde contre celui-ci, je ne l'utiliserais pas. BLEH i>
Je peux confirmer que cette solution ne fonctionne pas, comme dans mon cas, il réutilisait la valeur définie dans la requête précédente. Townvoted.
Si tel est le cas, vous n'avez pas utilisé cette requête exacte. Si vous avez un problème avec votre requête, vous devez poser une nouvelle question au lieu de voter une réponse que vous avez mal utilisée.
Sauf que comme @ck_ mentionné, la documentation dit explicitement de ne pas le faire: "En règle générale, autre que dans les instructions définies, vous ne devez jamais attribuer de valeur à une variable utilisateur et lire la valeur dans la même déclaration.". C'est donc faux et mérite toujours un bowvote, désolé.
Je pense que le seul moyen est de répéter votre premier complexe_expression dans votre seconde, bien que je pensais que MySQL puisse gérer de tels cas. P>
EDIT: Une recherche rapide a été relevée: http: //dev.mysql.com/doc/refman/5.0/fr/user-variables.html p>
Merci pour le lien, j'ai complètement manqué cette partie de MySQL!
Votre lien vers le manuel était très utile pour comprendre pourquoi la solution de Longneck était défectueuse, merci encore de nouveau.
Poussez le premier calcul dans une table dérivée:
select variable1
, complex_function(variable1, other_column) as variable2
, yet_another column
from (select complex_operation as variable1
, other_column
, yet_another_column
from whatever) dt
C'est Messier que je ne le voulais mais je vais vous donner la meilleure réponse à tous vos efforts, merci.
Dupliqué possible de Puis-je restreindre un champ calculé dans une sélection Query?