2010-10-08 8 views
136

¿Es posible establecer una variable de usuario basada en el resultado de una consulta en MySQL?MySQL: Establecer variable de usuario a partir del resultado de la consulta

Lo que queremos lograr es algo como esto (podemos suponer que tanto USER y GROUP son únicos):

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

por favor que sé que es posible, pero no quiero hacer esto con anidada consultas.

Respuesta

248

Sí, pero hay que mover la asignación de variables en la consulta: caso

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

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, ya sea = o := se puede utilizar como la tarea operador. Sin embargo, dentro de otras declaraciones, el operador de asignación debe ser := y no = porque = se trata como un operador de comparación en sentencias no establecidas.


ACTUALIZACIÓN:

En relación con los comentarios a continuación, también puede hacer lo siguiente:

SET @user := 123456; 
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group; 
+2

Por cierto, ¿podría suprimir la salida de la primera declaración (como su única asignación de variables) y sólo mostrar la salida de la segunda consulta? –

+2

@Avada: actualicé mi respuesta con una alternativa que no genera un resultado para la asignación de variable. –

+0

Spot on Daniel. ¡Gracias! –

41

Sólo agregar un paréntesis en torno a la consulta:

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

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

La consulta:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID; 

Mohammed Hasan (Rúpam)

2

En primer lugar permite echar un vistazo a cómo podemos definir una variable en MySQL

Para definir una varible en MySQL se debería 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 hacerlo

  1. Usando la palabra clave 'SET'.

Ejemplo: - mysql> SET @a = 1;

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

Ejemplo: - mysql> @a: = 1;

  1. Al usar la instrucción 'SELECT'.

Ejemplo: - mysql> seleccione 1 en @a;

Aquí @a es una 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 utilizar instrucción de selección como

Ejemplo: -

mysql> select @ un;

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

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

Para ello podemos utilizar dos estados como: -

  1. @ un: = (seleccione EMP_NAME de empleado en emp_id = 1);

  2. seleccione emp_name en @a del empleado donde emp_id = 1;

siempre de EMP_NAME cuidado debe devolver un solo valor de lo contrario será lanzar una error en este tipo de declaraciones.

refieren lo siguiente: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql

Cuestiones relacionadas