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_id
と stu_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_1
の value
の値に基づいて、table_2
の value
の値を更新します。これは、次のクエリで実行できます。
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 の別のテーブルの値に基づいて、あるテーブルの列を効率的に更新できます。