MySQL: Establecer variable de usuario a partir del resultado de la consulta


¿Es posible establecer una variable de usuario basada en el resultado de una consulta en MySQL?

Lo que quiero lograr es algo como esto (podemos asumir que tanto USER como GROUP son únicos):

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;

Tenga en cuenta que sé que es posible, pero no deseo hacer esto con consultas anidadas.

 154
Author: Teun Zengerink, 2010-10-08

4 answers

Sí, pero necesita mover la asignación de variables a la consulta:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

Caso de prueba:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

Resultado:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)

Tenga en cuenta que para SET, se puede usar = o := como operador de asignación. Sin embargo, dentro de otras sentencias, el operador de asignación debe ser := y no = porque = se trata como un operador de comparación en sentencias no ESTABLECIDAS.


ACTUALIZACIÓN:

Además de los comentarios a continuación, también puede hacer el siguiente:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
 277
Author: Daniel Vassallo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-08 08:18:49

Simplemente agregue paréntesis alrededor de la consulta:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;
 51
Author: Sdz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-03 08:51:43

Primero echemos un vistazo a cómo podemos definir una variable en mysql

Para definir una variable en mysql debe comenzar con ' @ 'como @{variable_name} y este' {variable_name}', podemos reemplazarlo con nuestro nombre de variable.

Ahora, cómo asignar un valor en una variable en mysql. Para esto tenemos muchas maneras de hacer eso

  1. Usando la palabra clave 'SET'.

Ejemplo :- mysql > SET @a = 1;

  1. Sin usar la palabra clave ' SET ' y usando ':='.

Ejemplo:- mysql > @a:=1;

  1. Usando la instrucción 'SELECT'.

Ejemplo:- mysql > seleccionar 1 en @a;

Aquí @a es la variable definida por el usuario y 1 se va a asignar en @a.

Ahora cómo obtener o seleccionar el valor de @{variable_name}.

Podemos usar la instrucción select como

Ejemplo: -

Mysql > seleccionar @a;

Mostrará la salida y mostrará el valor de @a.

Ahora cómo asignar un valor desde un tabla en una variable.

Para esto podemos usar dos sentencias como: -

  1. @a: = (seleccione emp_name del empleado donde emp_id = 1);

  2. Seleccione emp_name en @a desde empleado donde emp_id = 1;

Siempre tenga cuidado emp_name debe devolver un solo valor de lo contrario le lanzará un error en las sentencias de este tipo.

Consulte esto:- http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql

 6
Author: dilraj singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-09 05:18:22

Use esta manera para que el resultado no se muestre mientras ejecuta el procedimiento almacenado .

La consulta:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
 2
Author: Rupam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-13 05:11:37