recherche

Maison  >  Questions et réponses  >  le corps du texte

Les variables temporaires MySQL peuvent-elles être utilisées dans la clause WHERE ?

Dans MySQL, les variables temporaires peuvent-elles être utilisées dans la clause WHERE ?

Par exemple, dans la requête suivante :

SELECT `id`, @var := `id` * 2 FROM `user`

@var a été défini avec succès sur deux fois la valeur de `id`

Cependant, si j'essaie de filtrer l'ensemble de résultats pour inclure uniquement les résultats où @var est inférieur à 10 :

SELECT `id`, @var := `id` * 2 FROM `user` WHERE @var < 10

Ensuite, je n'ai obtenu aucun résultat.

Comment filtrer les résultats en fonction de la valeur de @var ?

P粉798343415P粉798343415399 Il y a quelques jours589

répondre à tous(2)je répondrai

  • P粉760675452

    P粉7606754522023-10-25 09:10:31

    Q : Les variables temporaires MySQL peuvent-elles être utilisées dans la clause WHERE ?

    Oui. Les variables MySQL définies par l'utilisateur (telles que @var) peuvent être référencées dans la clause WHERE.

    Une variable définie par l'utilisateur est une référence à la valeur qui lui est actuellement attribuée lorsque l'expression est évaluée.

    Dans une requête, les prédicats de la clause WHERE sont évalués avant les expressions de la liste SELECT.

    C'est-à-dire que lors de l'accès à une ligne, @var < 10 sera évaluée comme une expression booléenne ; pour chaque ligne candidate, l'expression est évaluée et la ligne n'est renvoyée que si le résultat est VRAI.

    Si vous deviez fournir à cette variable une valeur numérique supérieure ou égale à 10, toutes les lignes seraient renvoyées avant d'exécuter l'instruction.

    Q : Comment filtrer les résultats en fonction de la valeur de @var ?

    Vous ne pouvez vraiment pas. (En fait, c'est ce que fait votre requête d'origine.)

    Vous pouvez inclure des prédicats dans des expressions autres que @var 之外的其他表达式中包含谓词;这些表达式可以从分配给 @var ; ces expressions peuvent être dérivées de la valeur attribuée à

    .

    HAVING 子句来过滤返回的行。 (注意:HAVING 子句在结果集准备好之后进行计算;与 WHEREEn option, vous pouvez renvoyer une expression dans la liste SELECT, puis utiliser une autre clause

    , qui évalue le moment où les lignes sont accédées. )

    Une autre option consiste à utiliser une vue en ligne pour préparer le jeu de résultats, puis la requête externe peut utiliser une clause WHERE sur l'expression renvoyée.

    @var 以外的表达式应用谓词;他们实际上并没有对 @varMais à proprement parler, ces méthodes appliquent toutes des prédicats à des expressions autres que

    ; elles ne testent pas réellement les valeurs de 🎜 ; 🎜

    répondre
    0
  • P粉530519234

    P粉5305192342023-10-25 00:42:47

    Vous devez attribuer un alias et le tester dans la clause HAVING :

    SELECT id, @var := id * 2 AS id_times_2
    FROM user
    HAVING id_times_2 < 10

    Notez que si vous utilisez simplement une formule pour filtrer, plutôt que de transmettre les résultats internes d'une ligne à la suivante, vous n'avez pas du tout besoin de cette variable. Vous pouvez écrire :

    SELECT id, id * 2 AS id_times_2
    FROM user
    HAVING id_times_2 < 10

    répondre
    0
  • Annulerrépondre