MySQL の別のテーブルからテーブルを更新する

Preet Sanghavi 2022年3月29日
MySQL の別のテーブルからテーブルを更新する

このチュートリアルでは、MySQL の別のテーブルのエントリに基づいてテーブルの値を更新する方法を探ることを目的としています。

多くの場合、企業や組織は特定のテーブルの値を絶えず更新する必要があります。さらに、これらの値は、別のテーブルのエントリに基づいて更新する必要がある場合があります。この別のテーブルは、1つ以上の列に基づいて更新されるテーブルにリンクされている可能性があります。

たとえば、2つのテーブルがあるとします。1つは student_details で、もう 1つは student_ids です。これらのテーブルには両方とも、stu_firstName という名前の共通の列があります。student_details テーブルの一致情報を使用して、student_ids テーブルを学生の ID 番号で更新したいと思います。これは、UPDATE JOIN 句を使用して実行できます。

この方法がどのように機能するかを理解しましょう。

ただし、開始する前に、操作するダミーデータセットを作成します。ここでは、テーブル student_details とその中のいくつかの行を作成します。

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

上記のクエリは、学生の名前と姓を含む行とともにテーブルを作成します。データのエントリを表示するために、次のコードを使用します。

SELECT * FROM student_details;

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

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

学生の ID 番号と名前を示す列 stu_idstu_firstName を持つ student_ids という名前の別のテーブルを作成してみましょう。これは、次のクエリで実行できます。

CREATE TABLE student_id(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL
);

INSERT INTO student_id(stu_id, stu_firstName) 
 VALUES(1,"Preet"),
 (1,"Rich"),
 (1,"Veron"),
 (5,"Geo"),
 (5,"Hash"),
 (5,"Sachin"),
 (5,"David");

この表は次のように視覚化できます。

select * from student_id;

前述のコードの出力は、次のように説明できます。

stu_id	stu_firstName
1		Preet
1		Rich
1		Veron
5		Geo
5		Hash
5		Sachin
5		David

それでは、student_details テーブルを使用して student_id テーブルを更新してみましょう。

MySQL の UPDATE JOIN

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

UPDATE table_2
INNER JOIN table_1 ON table_2.name = table_1.name
SET table_2.value = IF(table_1.value > 0, table_1.value, table_1.value)

ご覧のとおり、前述のクエリでは、table_1value の値に基づいて、table_2value の値を更新します。これは、次のクエリで実行できます。

UPDATE student_id
INNER JOIN student_details ON student_id.stu_firstName = student_details.stu_firstName
SET student_id.stu_id = student_details.stu_id;

前述のコードは、student_id テーブルの stu_id 列の値を更新します。前述のコードの出力は、次のように説明できます。

stu_id	stu_firstName
1		Preet
2		Rich
3		Veron
4		Geo
5		Hash
6		Sachin
7		David

ご覧のとおり、列名 stu_id はテーブル student_details の値に基づいて更新されます。この結合は、共通のテーブル名 stu_firstName を使用して実行されます。この stu_firstName 値は両方の列で一致し、student_details テーブルの stu_id 列の対応する値は student_id テーブルに反映されます。

このソリューションの代替手段は、INNER JOIN の使用を避け、WHERE ON 句を使用して直接結合を実行することです。前述の操作は、この手法で次のように実行できます。

UPDATE student_id
SET student_id.stu_id = (
	SELECT student_details.stu_id 
    from student_details
    WHERE student_details.stu_firstName = student_id.stu_firstName
);

ここで、ご覧のとおり、前述のコードの出力は、次のような結果を得るために、コマンド SELECT * from student_id を使用して再度示すことができます。

stu_id	stu_firstName
1		Preet
2		Rich
3		Veron
4		Geo
5		Hash
6		Sachin
7		David

したがって、UPDATE JOIN 手法を使用すると、MySQL の別のテーブルの値に基づいて、あるテーブルの列を効率的に更新できます。

著者: 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 Query