Maison >base de données >tutoriel mysql >Comment puis-je utiliser correctement les variables dans une instruction MySQL SELECT ?

Comment puis-je utiliser correctement les variables dans une instruction MySQL SELECT ?

DDD
DDDoriginal
2024-12-16 14:13:09929parcourir

How Can I Correctly Use Variables Within a MySQL SELECT Statement?

Utilisation de variables dans les instructions SELECT

Lorsque vous travaillez avec MySQL, vous pouvez rencontrer des scénarios dans lesquels vous souhaitez définir et utiliser des variables dans le même SELECT déclaration. Cependant, il est important d'être conscient des limitations impliquées.

Affectation des variables et lisibilité

Selon la documentation MySQL, il n'est généralement pas recommandé d'attribuer une valeur à un variable utilisateur et lisez-la dans la même instruction. L'ordre d'évaluation des expressions impliquant des variables utilisateur n'est pas défini et peut varier en fonction des éléments de l'instruction.

Cela signifie que la requête suivante peut ne pas se comporter comme prévu :

SELECT
    @z:=SUM(item),
    2*@z
FROM
    TableA;

Dans ce cas , vous obtiendrez probablement NULL pour la deuxième colonne.

Pourquoi la différence avec les procédures ?

Vous On peut se demander pourquoi la requête suivante, qui utilise une procédure stockée au lieu d'une variable utilisateur, fonctionne comme prévu :

SELECT
    @z:=someProcedure(item),
    2*@z
FROM
    TableA;

La raison en est que les procédures stockées sont évaluées différemment des variables utilisateur. L'ordre d'évaluation des procédures stockées est défini et cohérent.

Utilisation d'une sous-requête

Pour obtenir la fonctionnalité souhaitée, vous pouvez utiliser une sous-requête :

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;

Cette approche utilise une sous-requête pour initialiser la variable utilisateur (@z), puis la référence dans la requête principale.

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