MySQL 支援多表連接更新與刪除,語法靈活且強大。本文匯總實戰常用模式。
UPDATE item i
JOIN resource_library r ON r.resource_id = l.resource_id
JOIN resource_review_link l ON i.item_id = l.instance_id
SET i.name = CONCAT('Review:', r.resource_name)
WHERE l.level = 'item' AND i.name = '';
UPDATE a
SET a.schoolname = b.schoolname
FROM tb_Std AS a
JOIN tb_Sch AS b ON a.School = b.School
WHERE a.std_year = 2005;
MySQL/標準寫法:
DELETE a
FROM table1 a
JOIN table2 b ON a.col1 = b.col1 AND a.col2 = b.col2;
Oracle 兼容寫法(使用 EXISTS):
DELETE FROM table1 a
WHERE EXISTS (
SELECT 1 FROM table2 b
WHERE a.col1 = b.col1 AND a.col2 = b.col2
);
| 特性 | MySQL | SQL Server | Oracle |
|---|---|---|---|
| UPDATE JOIN | 支援 UPDATE ... JOIN ... SET | 支援 UPDATE ... FROM ... JOIN | 需用 MERGE 或子查詢 |
| DELETE JOIN | 支援 DELETE a FROM a JOIN b | 支援 DELETE a FROM a, b | 需用 EXISTS 子查詢 |
| 別名引用 | 直接用別名 | 需加表別名 | 子查詢關聯外部表 |
SELECT 驗證影響行數