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

【MySQL】別のテーブルの値を使ってテーブルを更新する方法|UPDATE文とサブクエリの活用


MySQLにおいて、あるテーブルの値を別のテーブルに格納されている値で更新したい場合は、UPDATE文のSET句の中でサブクエリを式として記述します。この方法を使えば、参照先テーブルから取得した値をもとに、対象テーブルのカラムをまとめて更新することができます。

基本構文

基本的な構文は以下のとおりです。

UPDATE 対象テーブル 
SET 更新対象カラム = (SELECT 参照カラム FROM 参照テーブル WHERE 結合条件)
WHERE 更新条件;

具体例:studentテーブルとinfoテーブルを使った更新

ここでは、「student」テーブルと「info」テーブルという2つのテーブルを例に説明します。「info」テーブルの「remarks」カラムの値を参照して、「student」テーブルの「grade」カラムを更新していきます。

まず、現在の両テーブルの状態を確認しましょう。

mysql> select * from student;
+----+---------+-------+
| Id | Name    | grade |
+----+---------+-------+
| 1  | Rahul   | NULL  |
| 2  | Gaurav  | NULL  |
| 3  | Raman   | NULL  |
| 4  | Harshit | NULL  |
| 5  | Aarav   | NULL  |
+----+---------+-------+
5 rows in set (0.01 sec)

mysql> select * from info;
+------+-----------+
| id   | remarks   |
+------+-----------+
| 1    | Good      |
| 2    | Good      |
| 3    | Excellent |
| 4    | Average   |
| 5    | Best      |
+------+-----------+
5 rows in set (0.00 sec)

次に、以下のようなUPDATE文を実行します。

mysql> UPDATE STUDENT SET grade = (SELECT remarks from info WHERE info.id = student.id) WHERE id > 0;
Query OK, 5 rows affected (0.08 sec)
Rows matched: 5 Changed: 5 Warnings: 0

このクエリでは、サブクエリ (SELECT remarks from info WHERE info.id = student.id) を使って、各学生のIDに対応する「remarks」の値を取得し、「grade」カラムに代入しています。WHERE info.id = student.id の条件で2つのテーブルが関連付けられている点がポイントです。

実行後にSELECT文で確認すると、正しく更新されていることがわかります。

mysql> Select * from student;
+----+---------+-----------+
| Id | Name    | grade     |
+----+---------+-----------+
| 1  | Rahul   | Good      |
| 2  | Gaurav  | Good      |
| 3  | Raman   | Excellent |
| 4  | Harshit | Average   |
| 5  | Aarav   | Best      |
+----+---------+-----------+
5 rows in set (0.00 sec)

補足:JOINを使った更新方法

サブクエリを使わずに、UPDATE文とINNER JOINを組み合わせて同様の更新を行うことも可能です。大量のデータを扱う場合には、こちらの方がパフォーマンス面で有利になることがあります。

UPDATE student 
INNER JOIN info ON student.id = info.id 
SET student.grade = info.remarks;

注意点

  • 対応する行が存在しない場合: サブクエリ方式では、結合条件に一致する行が参照先テーブルに存在しないと、更新対象カラムにNULLが設定されるため注意が必要です。
  • WHERE句による絞り込み: 更新範囲を限定したい場合は、外側のWHERE句で条件を指定することで意図しない行の更新を防げます。
  • 事前確認: 本番環境で実行する前に、SELECT文でサブクエリ単体の結果を確認しておくと安全です。
  1. C#でLINQを使用してコレクションの値を更新する方法

    C#でコレクションの要素を更新したい場合、LINQの機能を活用するとコードを簡潔に記述できます。コレクションがList<T>型であれば、LINQに含まれるForEach拡張メソッドを利用するのが最も手軽な方法です。 ForEach拡張メソッドですべての要素を更新する ForEach拡張メソッドは、リストの各要素に対して引数として渡したラムダ式の処理を実行します。以下の例では、リスト内のすべての果物(Fruit)オブジェクトのSizeプロパティを「Large」に一括で変更しています。 using System; using System.Collections.Generic; n

  2. PythonとMySQL Connectorでテーブル内の特定の値を更新する方法を解説

    テーブル内のデータは時間の経過とともに古くなり、後から修正が必要になることがあります。たとえば、学生情報を管理するテーブルがあり、ある学生が引っ越したために住所が変わったとしましょう。この場合、誤ったデータが原因で将来トラブルが発生しないよう、データベース側の情報も忘れずに更新しておく必要があります。 MySQLでは「UPDATE」ステートメントを使ってテーブル内の値を更新します。SET句で列に設定する新しい値を指定し、WHERE句でテーブル内のどの行を更新対象とするかを特定します。 基本構文 UPDATE table_name SET column=new_value WHERE colum