【MySQL】同じ値を持つ交互の行(偶数行)の文字列を一括更新するクエリ
この記事では、MySQLで「同じ値を持つ行を1行おき(交互の行)に別の値へ更新する」方法を解説します。具体的には、Idカラムの値が偶数である行だけを条件として抽出し、UPDATE文とREPLACE()関数を組み合わせて文字列を置き換えます。
1. サンプルテーブルの作成
まず、テーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Subject varchar(100)
-> );
Query OK, 0 rows affected (0.76 sec)
2. レコードの挿入
INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは「MongoDB」という値を複数回登録している点に注目してください。
mysql> insert into DemoTable(Subject) values('C');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Subject) values('Java');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Subject) values('Python');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.16 sec)3. レコードの確認
SELECT文ですべてのレコードを表示します。
mysql> select *from DemoTable;
出力結果
+----+---------+
| Id | Subject |
+----+---------+
| 1 | C |
| 2 | MongoDB |
| 3 | Java |
| 4 | MongoDB |
| 5 | Python |
| 6 | MongoDB |
+----+---------+
6 rows in set (0.00 sec)
4. 交互の行(偶数行)を更新するクエリ
以下が、1行おき(ここではIdが偶数の行)の文字列を更新するクエリです。WHERE Id%2=0という条件により、Idが偶数の行だけが更新対象になります。
mysql> update DemoTable set Subject=replace(Subject,'MongoDB','MySQL') where Id%2=0;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3 Changed: 3 Warnings: 0
このクエリでは、REPLACE(Subject, 'MongoDB', 'MySQL')によって、対象行の「MongoDB」をすべて「MySQL」へ置き換えています。
5. 更新結果の確認
再度テーブルの全レコードを確認してみましょう。
mysql> select *from DemoTable;
出力結果
+----+---------+
| Id | Subject |
+----+---------+
| 1 | C |
| 2 | MySQL |
| 3 | Java |
| 4 | MySQL |
| 5 | Python |
| 6 | MySQL |
+----+---------+
6 rows in set (0.00 sec)
実行結果のとおり、Idが偶数(2・4・6)の行にある「MongoDB」だけが「MySQL」に更新され、奇数行は元の値のまま維持されました。このように%(モジュロ演算子)を活用すれば、一定間隔で並ぶ行だけを簡単にまとめて更新できます。
-
MySQLで特定の下3桁の値を除外するクエリの書き方
テーブルから特定の下3桁を持つ値を除外してデータを取得したい場合は、NOT IN 演算子と RIGHT() 関数を組み合わせることで実現できます。ここでは、実際にサンプルテーブルを作成しながら手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable(Value int); Query OK, 0 rows affected (0.71 sec)2. テーブルにレコードを挿入するINSERTコマンドを使って、いくつかのレコードを登録します。mysql> insert into
-
MySQLクエリで同じ行内の文字列に値(部分文字列)が含まれているか確認する方法
MySQLでは、同じ行内の異なるカラム同士で文字列の一致を確認したいケースがあります。例えば、「名前(FirstName)」が「フルネーム(FullName)」に含まれているかどうかを判定したい場合などです。このような場合は、LIKE演算子とCONCAT()関数を組み合わせることで実現できます。この記事では、実際にテーブルを作成し、データの挿入からクエリの実行まで順を追って解説します。1. サンプルテーブルの作成まず、検証用のテーブルを作成します。mysql> create table DemoTable ( FirstName varchar(100), FullNam