從 MySQL 中的另一個表更新表

Preet Sanghavi 2022年5月13日
從 MySQL 中的另一個表更新表

在本教程中,我們旨在探索如何根據 MySQL 中另一個表的條目更新表的值。

很多時候,企業和組織有必要不斷更新特定表的值。此外,這些值可能需要根據另一個表中的條目進行更新。這個另一個表可能連結到要基於一個或多個列更新的表。

例如,假設我們有兩個表。一個是 student_details,另一個是 student_ids。這兩個表都有一個名為 stu_firstName 的公共列。我們希望使用來自 student_details 表的匹配資訊來更新 student_ids 表與學生的身份號碼。這可以在 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

讓我們嘗試建立另一個名為 student_ids 的表,其中包含表示學生身份編號和姓名的列 stu_idstu_firstName。我們可以使用以下查詢來做到這一點。

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