MySQL INステートメントの基本的な使用法は、1つの列が複数の値と比較されることを扱います。 MySQL INステートメントの高度な使用法もいくつかあり、興味深いユースケースになります。サンプルテーブルuser_tableについて考えてみます。 ここで、5人のユーザーには、管理者、スーパーユーザーなどに基づく値1または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 | +-----------+----------+--------------+----------+-----------+
ユースケース1:MySQLINステートメントを使用して値を複数の列と比較する
構文は次のとおりです。
SELECT * FROM TableName WHERE value IN (column1, column2, column3, column4)
例:
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 | +-----------+----------+--------------+----------+-----------+
通常のINステートメントには、1つの列のみが含まれます。 複数の値と比較されています 。
SELECT * FROM TableName WHERE column1 IN (1,2,3,4)
として機能します
SELECT * FROM TableName WHERE column1 = 1 OR column1 = 2 OR column1 = 3 OR column1 = 4
このステートメントは価値です つまり、複数の列と比較して
SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)
と同じ
SELECT * FROM TableName WHERE column1 = 1 OR column2 = 1 OR column3 = 1 OR column4 = 1
ユースケース2:複数の値を持つ複数の列を比較するためのMySQLINステートメント
構文は次のとおりです。
SELECT * FROM TableName WHERE (column1,column2) in ((value1,value2),(value3,value4),..)
例:
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 | +-----------+----------+--------------+----------+-----------+
それはとして動作します