L'uso di base dell'istruzione MySQL IN si occupa del confronto di una colonna con più valori. Ci sono anche un paio di usi avanzati dell'istruzione MySQL IN che creano casi d'uso interessanti. Considera la tabella di esempio user_table dove a 5 utenti vengono assegnate autorizzazioni diverse come amministratore, superutente, ecc. Valori basati su 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 | +-----------+----------+--------------+----------+-----------+
Usa il caso 1:istruzione MySQL IN per confrontare un valore con più colonne
La sua sintassi è:
SELECT * FROM TableName WHERE value IN (column1, column2, column3, column4)
Ad esempio,
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 consueta istruzione IN coinvolge solo UNA COLONNA che viene confrontato con più valori .
SELECT * FROM TableName WHERE column1 IN (1,2,3,4)
Funziona come
SELECT * FROM TableName WHERE column1 = 1 OR column1 = 2 OR column1 = 3 OR column1 = 4
Questa affermazione è UN VALORE cioè rispetto a più colonne
SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)
è uguale a
SELECT * FROM TableName WHERE column1 = 1 OR column2 = 1 OR column3 = 1 OR column4 = 1
Utilizzare il caso 2:istruzione MySQL IN per confrontare più colonne con più valori
La sua sintassi è:
SELECT * FROM TableName WHERE (column1,column2) in ((value1,value2),(value3,value4),..)
Ad esempio,
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 | +-----------+----------+--------------+----------+-----------+
Funziona come