sql >> Base de Datos >  >> RDS >> Mysql

Tutorial de MySQL:instrucción MySQL IN (avanzado)

El uso básico de la instrucción MySQL IN se relaciona con una columna que se compara con múltiples valores. También hay un par de usos avanzados de la instrucción MySQL IN que hacen casos de uso interesantes. Considere la tabla de muestra user_table donde a 5 usuarios se les asignan diferentes permisos como administrador, superusuario, etc. basados ​​en valores 1 o 0,

mysql> SELECT * FROM user_table;
+-----------+----------+--------------+----------+-----------+
| user_id   | is_admin | is_superuser | is_staff | is_active |
+-----------+----------+--------------+----------+-----------+
|    1      |    1     |       1      |     1    |     1     |
|    2      |    0     |       1      |     1    |     1     |
|    3      |    0     |       1      |     1    |     1     |
|    4      |    0     |       0      |     0    |     1     |
|    5      |    0     |       0      |     0    |     0     |
+-----------+----------+--------------+----------+-----------+

Caso de uso 1:instrucción MySQL IN para comparar un valor con varias columnas

Su sintaxis es:

SELECT * FROM TableName WHERE value IN (column1, column2, column3, column4)

Por ejemplo,

mysql> SELECT * FROM user_table WHERE 1 IN (is_admin, is_superuser, is_staff, is_active);

+-----------+----------+--------------+----------+-----------+
| user_id   | is_admin | is_superuser | is_staff | is_active |
+-----------+----------+--------------+----------+-----------+
|    1      |    1     |       1      |     1    |     1     |
|    2      |    0     |       1      |     1    |     1     |
|    3      |    0     |       1      |     1    |     1     |
|    4      |    0     |       0      |     0    |     1     |
+-----------+----------+--------------+----------+-----------+

La declaración IN habitual involucra solo UNA COLUMNA que se compara con múltiples valores .

SELECT * FROM TableName WHERE column1 IN (1,2,3,4)

Funciona como

SELECT  * FROM   TableName WHERE  column1 = 1 OR column1 = 2 OR column1 = 3 OR column1 = 4

Esta afirmación es UN VALOR que se compara con varias columnas

SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)

es igual que

SELECT  * FROM   TableName WHERE  column1 = 1 OR column2 = 1 OR column3 = 1 OR column4 = 1

Caso de uso 2:instrucción MySQL IN para comparar varias columnas con varios valores

Su sintaxis es:

SELECT * FROM TableName WHERE (column1,column2) in ((value1,value2),(value3,value4),..)

Por ejemplo,

mysql> SELECT * FROM user_table WHERE (is_staff,is_admin) in ((1,0),(1,1));
+-----------+----------+--------------+----------+-----------+
| user_id   | is_admin | is_superuser | is_staff | is_active |
+-----------+----------+--------------+----------+-----------+
|    1      |    1     |       1      |     1    |     1     |
|    2      |    0     |       1      |     1    |     1     |
+-----------+----------+--------------+----------+-----------+

funciona como