從 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_id
和 stu_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_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 中另一個表的值有效地更新一個表的列。