Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tutorial MySQL:Instrução MySQL IN (Avançado)


O uso básico da instrução MySQL IN lida com uma coluna sendo comparada a vários valores. Há também alguns usos avançados da instrução MySQL IN que fazem casos de uso interessantes. Considere a tabela de amostra user_table onde 5 usuários recebem permissões diferentes como administrador, superusuário, etc, com valores 1 ou 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:instrução MySQL IN para comparar um valor com várias colunas


Sua sintaxe é:
SELECT * FROM TableName WHERE value IN (column1, column2, column3, column4)

Por exemplo,
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     |
+-----------+----------+--------------+----------+-----------+

A instrução IN usual envolve apenas ONE COLUMN que está sendo comparado com vários 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 declaração é UM VALOR que é comparado com várias colunas
SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)

é o mesmo que
SELECT  * FROM   TableName WHERE  column1 = 1 OR column2 = 1 OR column3 = 1 OR column4 = 1

Caso de uso 2:instrução MySQL IN para comparar várias colunas com vários valores


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

Por exemplo,
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