sql >> Databasteknik >  >> RDS >> Mysql

MySQL Tutorial:MySQL IN-uttalande (avancerat)

Den grundläggande användningen av MySQL IN-satsen handlar om att en kolumn jämförs med flera värden. Det finns också ett par avancerade användningsområden för MySQL IN-utlåtandet som gör intressanta användningsfall. Tänk på exempeltabellen user_table där 5 användare tilldelas olika behörigheter som admin, superanvändare, etc baserade värden 1 eller 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     |
+-----------+----------+--------------+----------+-----------+

Använd fall 1:MySQL IN-sats för att jämföra ett värde med flera kolumner

Syntaxen är:

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

T.ex.

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     |
+-----------+----------+--------------+----------+-----------+

Den vanliga IN-satsen omfattar endast EN KOLUMN som jämförs med flera värden .

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

Det fungerar som

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

Detta uttalande är ETT VÄRDE som är jämfört med flera kolumner

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

är samma som

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

Använd fall 2:MySQL IN-sats för att jämföra flera kolumner med flera värden

Syntaxen är:

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

T.ex.

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     |
+-----------+----------+--------------+----------+-----------+

Det fungerar som

  1. Hur UNCOMPRESS() fungerar i MariaDB

  2. Hur tar man reda på om en upsert var en uppdatering med PostgreSQL 9.5+ UPSERT?

  3. Bättre samtidighet i Oracle än SQL Server?

  4. Kommer UUID som primärnyckel i PostgreSQL att ge dålig indexprestanda?