MySQLでカンマ区切りの値からレコードを取得するには?FIND_IN_SET()の使い方を解説
MySQLでカンマ区切りの値が格納されたカラムから、特定の値を含むレコードを取得したい場合、IN()ではなくFIND_IN_SET()を使用するのが正解です。IN()はカンマ区切りの文字列を1つの値として扱ってしまうため、意図した通りに動作しません。ここでは、FIND_IN_SET()を使った具体的な手順をサンプル付きで解説します。
テーブルの作成
まず、動作確認用のサンプルテーブルを作成します。
mysql> create table DemoTable1423
-> (
-> CountryName varchar(100)
-> );
Query OK, 0 rows affected (0.51 sec)
レコードの挿入
insertコマンドを使って、カンマ区切りの値を含むレコードをテーブルに挿入します。
mysql> insert into DemoTable1423 values('AUS,UK');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1423 values('US');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1423 values('AUS,UK,US');
Query OK, 1 row affected (0.13 sec)
テーブルの内容を確認する
selectコマンドで、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1423;
実行すると、以下のような出力が得られます。
+-------------+ | CountryName | +-------------+ | AUS,UK | | US | | AUS,UK,US | +-------------+ 3 rows in set (0.00 sec)
FIND_IN_SET()でレコードを取得する
カンマ区切りの値の中に「US」が含まれるレコードだけを取得するには、以下のようにFIND_IN_SET()を使用します。
mysql> select * from DemoTable1423 where find_in_set('US',CountryName);
実行結果は以下の通りです。
+-------------+ | CountryName | +-------------+ | US | | AUS,UK,US | +-------------+ 2 rows in set (0.00 sec)
このように、FIND_IN_SET()を使えば、カンマ区切りの文字列の中から特定の値を正確に検索できます。第1引数に検索したい値、第2引数にカンマ区切りの文字列(対象カラム)を指定するだけで、値が見つかった場合はその位置を表す1以上の数値、見つからなかった場合は0が返されます。WHERE句と組み合わせることで、条件に一致するレコードのみを効率的に抽出できるのが大きなメリットです。
-
MySQLでランダムな行を取得する方法|ORDER BY RAND()を使った抽出テクニック
MySQLでランダムな行を取得する基本MySQLでランダムに行を取得したい場合、最も手軽な方法は ORDER BY RAND() を使うことです。この記事では、カンマ区切りの値を格納したデータを例に、特定の値を除外しながらランダムに行を抽出する方法をステップごとに解説します。1. サンプルテーブルを作成するまず、IDのリストを保存するためのシンプルなテーブルを作成します。mysql> create table DemoTable1835 ( ListOfIds varchar(20) &
-
MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法
MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。 1つ目のテーブル「demo52」を作成する まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。 mysql> CREATE TABLE `