MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでIN句に指定した値のみを任意の順序で表示する方法

MySQLでIN句に指定した値のみを任意の順序で表示する方法

MySQLでは、IN()ORDER BY句、さらにFIELD()関数を組み合わせることで、IN句内に指定した値だけを、希望する独自の順序で表示できます。通常のORDER BYは昇順・降順のソートしかできませんが、FIELD()関数を使えば自由に並び順を定義できるのがポイントです。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable1986
(
Number int
);
Query OK, 0 rows affected (0.00 sec)

次に、INSERTコマンドでいくつかのレコードを挿入します。

mysql> insert into DemoTable1986 values(50);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(60);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(100);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(200);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(350);
Query OK, 1 row affected (0.00 sec)

SELECT文でテーブル内の全レコードを確認してみます。

mysql> select * from DemoTable1986;

実行結果は以下のとおりです。

+--------+
| Number |
+--------+
| 50 |
| 60 |
| 100 |
| 200 |
| 350 |
+--------+
5 rows in set (0.00 sec)

IN句で指定した値のみを独自の順序で取得するクエリ

ここからが本題です。IN句に指定した値(50・100・350)だけを抽出し、しかも「350 → 100 → 50」という指定した通りの順序で表示するには、以下のようにクエリを書きます。

mysql> select * from DemoTable1986 where Number IN(50,100,350) order by field(Number,350,100,50);

実行結果:

+--------+
| Number |
+--------+
| 350 |
| 100 |
| 50 |
+--------+
3 rows in set (0.00 sec)

仕組みの解説

  • WHERE Number IN(50,100,350):テーブル全体から、Numberカラムが50・100・350のいずれかに一致する行だけを抽出します。この例では60と200が除外されます。
  • ORDER BY field(Number,350,100,50):FIELD()関数は、第2引数以降のリストの中で第1引数が何番目に位置するかを数値で返します。これにより、350 → 100 → 50という独自の並び順で結果をソートできます。

なお注意点として、FIELD()関数のリストに含まれていない値は「0」を返すため、ORDER BYと組み合わせた場合、そのような行は結果の先頭に表示されることになります。用途に応じて、WHERE句での絞り込みと併用することをおすすめします。

  1. MySQLのCOALESCE()関数で最初のNULL以外の値を取得する方法

    MySQLのCOALESCE()関数とはMySQLのCOALESCE()関数は、引数として渡された複数のカラムや値の中から、最初に見つかったNULL以外(NOT NULL)の値を返す関数です。この関数を活用することで、NULLが含まれるカラムを効率的に処理し、代替値を表示できます。ここでは、実際にテーブルを作成してデータを挿入し、COALESCE()関数の動作を確認していきましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable1927 ( StudentName varchar(20), S

  2. MySQLのREGEXPでアルファベットを含むレコードのみを抽出する方法|数字のみのレコードを除外

    MySQLのREGEXPで文字を含むレコードのみを表示する方法MySQLでは、文字列と数値が混在するカラムから、アルファベットを含むレコードだけを抽出し、数字のみのレコードを除外したいケースがあります。このような場合には、REGEXP演算子を使用すると簡単に実現できます。基本構文REGEXPを使った基本的な構文は以下の通りです。select yourColumnName from yourTableName where yourColumnName REGEXP [a-zA-Z];サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table d