聯表查詢(JOIN)與聯表刪除(Multi-table DELETE)是 MySQL 進階操作核心技能。本文系統整理 INNER/LEFT JOIN、UNION 查詢語法,以及三種聯表刪除模式的標準寫法與版本相容性注意事項。
SELECT t1.name, t2.salary
FROM employee AS t1
INNER JOIN info AS t2 ON t1.name = t2.name;
SELECT table1.*
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id IS NULL;
經典「找出左表有、右表無」的差集查詢。
SELECT col FROM table1
UNION
SELECT col FROM table2; -- 去重
UNION ALL -- 保留重複
-- 寫法 A
DELETE t1 FROM t1, t2 WHERE t1.id = t2.id;
-- 寫法 B(標準)
DELETE FROM t1 USING t1, t2 WHERE t1.id = t2.id;
-- 寫法 A
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHERE t2.id IS NULL;
-- 寫法 B
DELETE FROM t1 USING t1 LEFT JOIN t2 ON t1.id = t2.id WHERE t2.id IS NULL;
DELETE t1, t2
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t1.id = 25;
| 場景 | MySQL < 5.0 | MySQL ≥ 5.0 |
|---|---|---|
| 刪除別名表 | 需用原表名DELETE t1,t2 FROM table_name AS t1 ... | 可直接用別名DELETE t1,t2 FROM table_name AS t1 ... |
口訣: 5.0 前用表名,5.0 後用別名。實務上建議統一使用 DELETE 表名 FROM ... 寫法,避免版本遷移報錯。
SELECT 同條件驗證影響範圍。START TRANSACTION → DELETE → COMMIT/ROLLBACK)。