MySQL DELETE 語句**不支援**在表名後直接使用別名,這是常見語法錯誤。本文給出錯誤示例、正確寫法與多表刪除的標準語法。
-- ❌ 報錯:You have an error in your SQL syntax near 'caa WHERE caa.account_action_code...'
DELETE FROM account.comp_account_action caa
WHERE caa.account_action_code IN (10950112, 10950113, 10950114, 10950115);
-- ✅ 直接用表名,WHERE 內欄位無需前綴
DELETE FROM account.comp_account_action
WHERE account_action_code IN (10950112, 10950113, 10950114, 10950115);
MySQL 支援多表刪除時使用別名,但語法不同:
-- 刪除 t1 中符合條件的行(關聯 t2)
DELETE t1
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.t1_id
WHERE t2.status = 'deleted';
-- 或使用 USING 子句
DELETE FROM t1
USING table1 t1
INNER JOIN table2 t2 ON t1.id = t2.t1_id
WHERE t2.status = 'deleted';
| 場景 | 是否支援別名 | 正確語法 |
|---|---|---|
| 單表 DELETE | ❌ 不支援 | DELETE FROM table WHERE ... |
| 多表 DELETE (JOIN) | ✅ 支援 | DELETE t1 FROM t1 JOIN t2 ... |
| UPDATE (單表/多表) | ✅ 支援 | UPDATE t SET ... / UPDATE t1 JOIN t2 SET ... |
| SELECT | ✅ 支援 | SELECT * FROM t1 a JOIN t2 b ... |
DELETE/UPDATE 直接寫表名,欄位無需前綴DELETE/UPDATE 關鍵字後