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

MySQLクエリで配列の要素をすべて一致させる方法

MySQLでは、WHERE IN句とGROUP BYHAVING句を組み合わせることで、指定した配列(複数の値)のすべての要素に一致するレコードを持つIDを抽出できます。この記事では、具体的なサンプルを使ってその手順を解説します。

1. サンプルテーブルを作成する

まず、以下のコマンドでテーブル「DemoTable1523」を作成します。

mysql> create table DemoTable1523
    -> (
    -> Id int,
    -> Value int
    -> );
Query OK, 0 rows affected (0.76 sec)

2. レコードを挿入する

INSERTコマンドを使って、テーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable1523 values(1,56);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1523 values(2,78);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1523 values(1,34);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1523 values(2,45);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1523 values(1,99);
Query OK, 1 row affected (0.10 sec)

3. テーブルの内容を確認する

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

mysql> select * from DemoTable1523;

実行すると、次のような結果が出力されます。

+------+-------+
| Id   | Value |
+------+-------+
|    1 |    56 |
|    2 |    78 |
|    1 |    34 |
|    2 |    45 |
|    1 |    99 |
+------+-------+
5 rows in set (0.00 sec)

4. 配列の要素に一致するIDを取得するクエリ

ここが本題です。値「34」「99」「56」のすべてに一致するレコードを持つIdを取得するには、以下のようにクエリを記述します。

mysql> select Id from DemoTable1523
    -> where Value IN ('34','99','56')
    -> group by Id
    -> having count(*)=3;

ポイントは次の3点です。

  • WHERE Value IN (...)で、指定した値のいずれかに一致する行だけを絞り込みます。
  • GROUP BY Idで、Idごとに行をグループ化します。
  • HAVING count(*) = 3で、指定した3つの値すべてに一致するIdのみを残します。

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

+------+
| Id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

まとめ

上記の出力から、Id「1」だけが値34、99、56のすべてに一致していることがわかります。Id「2」は78と45しか持っていないため、条件を満たしません。このようにIN句・GROUP BYHAVING COUNT(*)を組み合わせれば、「配列内の全要素に一致するレコード」を簡単に抽出できます。なお、重複データが存在する可能性がある場合は、count(DISTINCT Value) = 3とすることでより安全に判定できます。

  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. 動的配列を活用したMySQLのLIKEクエリ実装方法を解説

    動的配列に対するLIKEクエリの基本構文 MySQLでカンマ区切りの複数値(いわゆる動的な配列)が格納されたカラムに対してLIKEクエリを実行したい場合、LIKE句とワイルドカード「%」を組み合わせることで部分一致検索が可能です。基本となる構文は以下の通りです。 select *from yourTableName     where yourColumnName2 like %yourValue%     order by yourColumnName1 asc     l