Cómo almacenar el resultado de la consulta en una variable usando mysql


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

Cuando ejecuto esta consulta con setvariable se muestra este error.

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

Respuestas:


148

Rodee esa selección con paréntesis.

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

12
¿Esa subconsulta debería contener solo 1 fila y 1 columna? 1. #1242 - Subquery returns more than 1 row , 2.#1241 - Operand should contain 1 column(s)
Shafizadeh

1
@RajatGupta: ¿dónde lo estás ejecutando? Y defina "no funciona".
Sergio Tulentsev

2
@Shafizadeh: sí, esa subconsulta debería devolver solo una fila y columna
Sergio Tulentsev

No funciona para mí, probé en phpmyadmin mysql. Aparece un error que dice "Se encontró una nueva instrucción, pero no hay un delimitador entre esta y la anterior" (traducido del alemán).
Negro

1
Parece que el valor de retorno tiene que ser uno, no una lista de valores
Victor S

35

Además, si desea establecer múltiples variables a la vez por una consulta, puede utilizar la otra sintaxis para establecer las variables que dice así: SELECT @varname:=value.

Un ejemplo práctico:

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

8

utilizar esta

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

probado y funciona bien ...


¿Qué significan los corchetes []en esta declaración?
amin

nada, es solo un marcador de posición omitir [] y poner su valor entre comillas simples
Aman Maurya

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.