MySQLで特定のフィールド・行を除外して他のレコードを表示する方法
はじめに
MySQLでは、CASE WHENステートメントを活用することで、特定の条件に一致するフィールドや行を結果から除外し、目的のレコードだけを表示できます。本記事では、実際のテーブル作成からクエリ実行まで、具体的な手順を解説します。
サンプルテーブルの作成
まず、デモ用のテーブルを作成しましょう。
mysql> create table demo47
-> (
-> first_name varchar(20),
-> last_name varchar(20)
-> );
Query OK, 0 rows affected (1.57 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにデータを追加します。
mysql> insert into demo47 values('John','Smith');
Query OK, 1 row affected (0.18 sec)
mysql> insert into demo47 values('David','Miller');
Query OK, 1 row affected (0.11 sec)
mysql> insert into demo47 values('John','Doe');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo47 values('Chris','Brown');
Query OK, 1 row affected (0.12 sec)テーブルの内容を確認
SELECT文で登録済みのレコードを表示してみましょう。
mysql> select *from demo47;
実行すると、以下のような結果が得られます。
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| John | Smith |
| David | Miller |
| John | Doe |
| Chris | Brown |
+------------+-----------+
4 rows in set (0.00 sec)
特定の行を除外して表示するクエリ
それでは、特定のフィールドや行を除外し、残りのレコードを表示するクエリを見ていきましょう。ここでは「John」という名前に一致する行を対象に処理を行います。
mysql> select case when first_name= 'John' then last_name else first_name end Result
-> from demo47
-> where 'John' in (first_name,last_name);
クエリのポイント
このクエリの仕組みは以下のとおりです。
WHERE句: 「'John' in (first_name, last_name)」により、first_nameまたはlast_nameのどちらかに「John」が含まれる行のみを抽出します。
CASE WHEN句: first_nameが「John」の場合はlast_nameの値を返し、それ以外の場合はfirst_nameの値を返します。これにより、除外したい値(John)が出力に現れなくなります。
実行結果
上記のクエリを実行すると、次の出力が得られます。
+--------+
| Result |
+--------+
| Smith |
| Doe |
+--------+
2 rows in set (0.00 sec)
まとめ
CASE WHENステートメントとWHERE句を組み合わせることで、MySQLで特定の値を持つフィールドや行を効果的に除外し、必要なレコードのみを柔軟に表示することが可能です。条件分岐を活用したこの手法は、データの整形やフィルタリングに非常に便利なので、ぜひ活用してみてください。
-
MySQLのMATCH...AGAINSTを使って特定のカラムに文字列を含む行を選択する方法
MySQLで特定のカラムに文字列を含む行を検索したい場合、FULLTEXTインデックスと MATCH() ... AGAINST() 構文を組み合わせることで、高速な全文検索が可能になります。ここでは、実際にテーブルを作成し、データを挿入して、MATCH...AGAINSTによる検索を行う手順を解説します。1. テーブルの作成まず、検索対象となるテーブルを作成します。mysql> create table DemoTable1833 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. FU
-
MySQLで特定の月と年に基づいてレコードを取得する方法
MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846 ( PurchaseDat