ใช้ 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);