Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คัดลอกค่าคอลัมน์ระหว่างตารางใน MySQL ตรงตาม ID ด้วย UPDATE JOIN

ใช้ UPDATE แบบ Multi-table (JOIN) เพื่อคัดลอกค่าจากตารางหนึ่งไปอีกตาราง โดยจับคู่ด้วย ID ที่ตรงกัน

ตารางต้นทาง DemoTable1

mysql> create table DemoTable1 ( 
    PersonId int, 
    Value int ); 
Query OK, 0 rows affected (0.64 sec)
mysql> insert into DemoTable1 values(100,78); 
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1 values(101,67); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1 values(102,89); 
Query OK, 1 row affected (0.19 sec)

ตารางปลายทาง DemoTable2 (มี StudentScore เป็น NULL)

mysql> create table DemoTable2 ( 
    StudentId int, 
    StudentScore int ); 
Query OK, 0 rows affected (0.57 sec)
mysql> insert into DemoTable2 values(100,NULL); 
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable2 values(102,NULL); 
Query OK, 1 row affected (0.22 sec)

คำสั่ง UPDATE JOIN คัดลอก Value -> StudentScore ตรงตาม ID

mysql> update DemoTable1, DemoTable2 
set DemoTable2.StudentScore = DemoTable1.Value 
where DemoTable2.StudentId = DemoTable1.PersonId; 
Query OK, 2 rows affected (0.13 sec)
Rows matched: 2  Changed: 2  Warnings: 0

ผลลัพธ์ใน DemoTable2

mysql> select * from DemoTable2;
+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
| 100       | 78           |
| 102       | 89           |
+-----------+--------------+
2 rows in set (0.00 sec)

คำอธิบาย: รูปแบบ UPDATE table1, table2 SET table2.col = table1.col WHERE table2.id = table1.id เป็น MySQL-specific syntax (ไม่ใช่ ANSI SQL) รองรับ JOIN หลายแบบได้

รูปแบบ ANSI SQL (รองรับ PostgreSQL, SQL Server, Oracle):

UPDATE DemoTable2 
SET StudentScore = (SELECT Value FROM DemoTable1 WHERE PersonId = DemoTable2.StudentId)
WHERE EXISTS (SELECT 1 FROM DemoTable1 WHERE PersonId = DemoTable2.StudentId);