Comment stocker le résultat de la requête dans une variable en utilisant mysql


92
SET @v1 := SELECT COUNT(*) FROM user_rating;
SELECT @v1

Lorsque j'exécute cette requête avec une setvariable, cette erreur s'affiche.

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'SELECT count(*) FROM user_rating' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(1 row(s) returned)
Execution Time : 00:00:00:343
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:343

Réponses:


149

Entourez cette sélection avec des parenthèses.

SET @v1 := (SELECT COUNT(*) FROM user_rating);
SELECT @v1;

12
Cette sous-requête devrait-elle contenir seulement 1 ligne et 1 colonne? 1. #1242 - Subquery returns more than 1 row , 2.#1241 - Operand should contain 1 column(s)
— Shafizadeh

1
@RajatGupta: où l'exécutez-vous? Et définissez «ne fonctionne pas».
— Sergio Tulentsev

3
@Shafizadeh: oui, cette sous-requête ne devrait renvoyer qu'une seule ligne et colonne
— Sergio Tulentsev

1
@Black: peut-être que certaines des autres réponses fonctionneront.
— Sergio Tulentsev

2
Il semble que la valeur de retour doit être un, pas une liste de valeurs
— Victor S

35

De plus, si vous souhaitez définir plusieurs variables à la fois par une requête, vous pouvez utiliser l'autre syntaxe pour la définition des variables qui va comme ceci: SELECT @varname:=value.

Un exemple pratique:

SELECT @total_count:=COUNT(*), @total_price:=SUM(quantity*price) FROM items ...

8

utilisez ceci

 SELECT weight INTO @x FROM p_status where tcount=['value'] LIMIT 1;

testé et fonctionne très bien ...


que signifient les crochets []dans cette déclaration?
— amin le

rien ce n'est qu'un espace réservé skip [] et mettez simplement votre valeur entre guillemets simples
— Aman Maurya

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.