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