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

MySQLで重複する列値が存在する場合、列値に基づいて行を除外する方法

MySQLで重複する列値が存在する場合、列値に基づいて行を除外する方法

MySQLでは、サブクエリ(副問い合わせ)を使用することで、特定の条件に該当する行だけでなく、同じキーを持つ他の行もまとめて除外できます。ここでは、具体的な手順をサンプルとともに解説します。

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

まず、CREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable1427
    -> (
    -> StudentId int,
    -> StudentMarks int
    -> );
Query OK, 0 rows affected (1.28 sec)

2. レコードの挿入

次に、INSERT文を使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable1427 values(201,89);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1427 values(201,99);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1427 values(210,98);
Query OK, 1 row affected (0.16 sec)

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

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

mysql> select * from DemoTable1427;

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

+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
|       201 |           89 |
|       201 |           99 |
|       210 |           98 |
+-----------+--------------+
3 rows in set (0.00 sec)

4. 条件に基づいて行を除外するクエリ

ここで、特定の列値が見つかった場合に、その列値に関連するすべての行を除外するクエリを紹介します。

この例では、StudentMarks が 89 のレコードは StudentId 201 に紐付いています。そして、同じ StudentId 201 は別のレコード(99点)も持っています。そこで、NOT IN 演算子と DISTINCT を組み合わせたサブクエリを使うことで、該当する StudentId を持つ両方の行が結果から除外されます。

mysql> select * from DemoTable1427
    -> where StudentId NOT IN (select distinct StudentId from DemoTable1427 where StudentMarks=89);

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

+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
|       210 |           98 |
+-----------+--------------+
1 row in set (0.00 sec)

このように、サブクエリで条件に一致する StudentId を抽出し、NOT IN で除外することで、目的の行だけを効率的に取得できます。データの整合性チェックやフィルタリング処理など、さまざまな場面で活用できるテクニックです。

  1. MySQLでタイムスタンプ列に基づいてデータを選択し、真偽値を設定する方法

    MySQLでタイムスタンプ列に基づいてデータを選択し、真偽値を設定する方法 MySQLではIF()関数を使うことで、タイムスタンプ列の値に基づいてデータを選択し、結果を真偽値(1または0)として取得できます。この記事では、実際のサンプルコードを交えながら手順を詳しく解説します。 まず、現在の日付を確認しておきましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-12-10 | +------------+ 1 row in set (0.00 sec) テーブルの作成 はじめに

  2. MySQLで値が「0」の場合に別の列から値を取得する方法

    MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー