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

MySQLで2つの特定の値を持つレコードを選択する方法|GROUP BYとHAVING句の使い方

特定の2つの値(ここではId)に一致するレコードを選択したい場合は、GROUP BY句HAVING句を組み合わせることで実現できます。この記事では、テーブルの作成から実際にレコードを抽出するまでの手順を、サンプルコードと実行結果とともにわかりやすく解説します。

1. テーブルを作成する

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value int
);
Query OK, 0 rows affected (0.52 sec)

2. レコードを挿入する

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

mysql> insert into DemoTable(Value) values(600);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Value) values(600);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Value) values(800);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Value) values(800);
Query OK, 1 row affected (0.09 sec)

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

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

mysql> select *from DemoTable;

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

+----+-------+
| Id | Value |
+----+-------+
|  1 |   600 |
|  2 |   600 |
|  3 |   800 |
|  4 |   800 |
+----+-------+
4 rows in set (0.00 sec)

4. 2つの値に一致するレコードを選択するクエリ

ここからが本題です。Idが「1」と「2」の両方に該当し、かつ同じValueを持つレコードを抽出するには、次のようなクエリを記述します。

mysql> select Value from DemoTable tbl
   where Id IN(1,2) group by Value
  having count(distinct Id)=2;

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

+-------+
| Value |
+-------+
|   600 |
+-------+
1 row in set (0.07 sec)

クエリのポイント解説

このクエリが正しく動作する仕組みは以下の3ステップです。

① WHERE句で絞り込み:WHERE Id IN(1,2)により、Idが1または2のレコードだけが対象になります。
② GROUP BYでグループ化:GROUP BY Valueによって、同じValueの値ごとにレコードがまとめられます。
③ HAVING句で条件判定:HAVING count(distinct Id)=2は、グループ内に異なるIdが2種類存在する場合のみ結果を返します。

今回の例では、Id=1とId=2のどちらもValueが「600」であるため、「600」のみが出力されます。もし片方だけしか該当しない値があれば、count(distinct Id)が1になり、結果から除外されます。このようにGROUP BYとHAVING句を組み合わせることで、複数の条件値すべてに一致するレコードを効率的に抽出できます。

  1. MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

    MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks

  2. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;