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

MySQLクエリで同じ行内の文字列に値(部分文字列)が含まれているか確認する方法

MySQLでは、同じ行内の異なるカラム同士で文字列の一致を確認したいケースがあります。例えば、「名前(FirstName)」が「フルネーム(FullName)」に含まれているかどうかを判定したい場合などです。

このような場合は、LIKE演算子とCONCAT()関数を組み合わせることで実現できます。この記事では、実際にテーブルを作成し、データの挿入からクエリの実行まで順を追って解説します。

1. サンプルテーブルの作成

まず、検証用のテーブルを作成します。

mysql> create table DemoTable
(
    FirstName varchar(100),
    FullName varchar(100)
);
Query OK, 0 rows affected (0.53 sec)

2. テストデータの挿入

次に、INSERTコマンドを使ってレコードを挿入します。意図的に「FirstNameがFullNameに含まれないデータ」も混ぜておくのがポイントです。

mysql> insert into DemoTable values('John','John Smith');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('David','John Miller');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Bob','Sam Miller');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Chris','Chris Brown');
Query OK, 1 row affected (0.10 sec)

3. 登録されたレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が得られます。

+-----------+-------------+
| FirstName | FullName    |
+-----------+-------------+
| John      | John Smith  |
| David     | John Miller |
| Bob       | Sam Miller  |
| Chris     | Chris Brown |
+-----------+-------------+
4 rows in set (0.00 sec)

4. 同じ行内に値が含まれているか確認するクエリ

ここが本題です。LIKE演算子のパターンにCONCAT('%', FirstName, '%')を指定することで、各行ごとに「FullNameの中にFirstNameが含まれているか」を動的にチェックできます。

mysql> select FirstName,FullName from DemoTable
    where FullName LIKE concat('%', FirstName, '%');

5. 実行結果

上記のクエリを実行すると、以下の出力が得られます。

+-----------+-------------+
| FirstName | FullName    |
+-----------+-------------+
| John      | John Smith  |
| Chris     | Chris Brown |
+-----------+-------------+
2 rows in set (0.00 sec)

結果のポイント

  • John:「John Smith」に「John」が含まれるため一致 ✓
  • Chris:「Chris Brown」に「Chris」が含まれるため一致 ✓
  • David:「John Miller」に「David」は含まれないため対象外 ✗
  • Bob:「Sam Miller」に「Bob」は含まれないため対象外 ✗

このように、LIKEのパターン文字列をCONCAT()で組み立てることで、同一行内の他のカラムの値を条件として柔軟に利用できます。あいまい検索を行いたい場合に非常に便利なテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで最大の累積値とその出現回数を取得するクエリの書き方

    カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い

  2. 【C#入門】2つのStringオブジェクトが同じ値かどうかを確認する方法

    C#で2つの文字列(String)オブジェクトが同じ値を持っているかどうかを確認するには、Equals()メソッドを使用します。このメソッドは、2つの文字列の内容が一致していればtrueを、異なっていればfalseを返します。サンプルコード1:同じ値の場合まずは、2つの文字列が同じ値を持つ場合の例を見てみましょう。using System; public class Demo { public static void Main(String[] args){ string str1 = John; string str2 = John; Console