MySQL での UPDATE JOIN の使用

Preet Sanghavi 2023年1月3日
MySQL での UPDATE JOIN の使用

このチュートリアルでは、MySQL データベースで UPDATE JOIN ステートメントを使用する方法を紹介します。

通常、JOIN を使用して、他のテーブルに同様の行がある場合とない場合がある特定のテーブルの行を調べます。UPDATE ステートメントと一緒に JOIN 句を使用して、複数のテーブル更新を実装できます。

MySQL UPDATE JOIN の基本的な構文は次のように説明できます。

UPDATE Table_1, Table_2,
[INNER JOIN] Table_1 ON Table_1.Column_1 = Table_2. Column_1
SET Table_1.Column_2 = Table_2.Column_2, 
    Table_2.Column_3 = expression
WHERE condition

上記の構文は、MySQL の特定のテーブルに対して次のように機能します。

  • 作業を開始するには、table_1 というメインテーブルと、メインテーブルと結合するテーブルを table_2 として指定します。UPDATE 句に記載されているテーブルが更新され、UPDATE 句の後に記載されていないテーブルのデータは変更されません。
  • それを実行したら、使用する結合のタイプについて言及する必要があります。上記の構文では、INNER 結合を使用しています。この結合は、UPDATE 句の直後に行う必要があります。
  • 更新する列に値を指定した後、更新の特定の条件を指定するための WHERE 句について説明します。

この方法を使用するもう 1つの方法があり、次のように説明できます。

UPDATE Table_1, Table_2
SET Table_1.column_2 = Table_2.column_2,
      Table_2.column_3 = expr
WHERE Table_1.column_1 = Table_2.column_1 AND condition

始める前に、使用する 2つのテーブルを作成しましょう。これらのテーブルを student_details および marks と呼びます。これらのテーブルは、次のコードで作成できます。

CREATE TABLE marks (
    performance INT(11) NOT NULL,
    percentage FLOAT NOT NULL,
    PRIMARY KEY (performance)
);

CREATE TABLE student_details (
    stu_id INT(11) NOT NULL AUTO_INCREMENT,
    stu_name VARCHAR(255) NOT NULL,
    performance INT(11) DEFAULT NULL,
    total FLOAT DEFAULT NULL,
    PRIMARY KEY (emp_id),
    CONSTRAINT fk_performance FOREIGN KEY (performance)
        REFERENCES marks (performance)
);

INSERT INTO marks(performance,percentage)
VALUES(1,0),
      (2,0.01),
      (3,0.03),
      (4,0.05),
      (5,0.08);

INSERT INTO student_details(stu_name,performance,total)      
VALUES('Preet Sanghavi', 1, 50000),
      ('Joe Sand', 3, 65000),
      ('Su Greens', 4, 75000),
      ('Gray Dellop', 5, 125000),
      ('Neon Jonty', 3, 85000),
      ('Peter Foe', 2, 45000),
      ('Little Wayne', 3, 55000);

student_details テーブルを視覚化するために、次のコードを使用します。

SELECT * FROM student_details;

上記のコードは次の出力を提供します。

stu_id   stu_name 		stu_performance total
1		Preet Sanghavi		1			50000
2		Joe Sand			3			65000
3		Su Greens			4			75000
4		Gray Dellop			5			125000
5		Neon Jonty			3			85000
6		Peter Foe			2			45000
7		Little Wayne		3			55000

同様に、marks テーブルを視覚化できます。

SELECT * FROM marks;

上記のコードは次の出力を提供します。

performance    percentage 
1				0
2				0.01
3				0.03
4				0.05
5				0.08

上記のコードブロックからわかるように、パーセンテージ値は marks テーブルにあり、UPDATE JOININNER JOIN をメイン結合として使用して、各学生の total を調整する必要があります。marks テーブルの percentageperformance の値に基づく student_details テーブル。

2つのテーブル student_detailsmarks の間のブリッジは performance 列であることに注意することが重要です。

次に、UPDATE JOIN ステートメントの動作を見てみましょう。

MySQL で UPDATE JOIN ステートメントを使用する

次のクエリを使用して、上記のように更新操作を実行できます。

UPDATE student_details
        INNER JOIN
    marks ON student_details.performance = marks.performance 
SET 
    total = total + total * percentage;

ここで、student_details テーブルは、total の値を更新する必要があるメインテーブルです。

上記のクエリの UPDATE ステートメントの WHERE 句を削除するため、student_details テーブルのすべてのレコードが SET 条件に基づいて変更されます。

上記のクエリを出力すると、次の結果が得られます。

stu_id   stu_name 		stu_performance total
1		Preet Sanghavi		1			50000
2		Joe Sand			3			66950
3		Su Greens			4			78750
4		Gray Dellop			5			135000
5		Neon Jonty			3			87550
6		Peter Foe			2			45450
7		Little Wayne		3			56650

上記のコードブロックでわかるように、各生徒の total は、marks テーブルの performance に基づいて更新されます。

したがって、上記の手法を使用すると、MySQL で Update Join を効率的に使用できます。

著者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

関連記事 - MySQL Join

関連記事 - MySQL Update