INSERT INTO db1 (col1, col2) SELECT col1, col2 FROM db2;
-- 錯誤:缺少別名
INSERT INTO a (f1, f2) SELECT * FROM (SELECT b.f1, c.f2 FROM b JOIN c);
-- 正確:給子查詢起別名 AS tb
INSERT INTO a (f1, f2) SELECT * FROM (SELECT b.f1, c.f2 FROM b JOIN c) AS tb;
錯誤碼:ERROR 1248 (42000): Every derived TABLE must have its own alias
-- 錯誤
INSERT INTO db1 (f1, f2) VALUES SELECT f1, f2 FROM db2;
-- ERROR: You have an error in your SQL syntax
INSERT ... VALUES 只能接常數列表,不能接子查詢。INSERT ... SELECT 直接接查詢,**不寫 VALUES**。-- 將「訂單表」與「用戶表」關聯後的精簡資料,寫入「報表表」
INSERT INTO rpt_order_summary (order_id, user_name, order_amt, create_time)
SELECT o.id, u.name, o.amount, o.created_at
FROM orders o
INNER JOIN users u ON o.user_id = u.id
WHERE o.status = 'paid'
AND o.created_at >= '2024-01-01';
LIMIT 分批,避免長事務、大 binlog。SET sql_log_bin=0 加速導入。LOAD DATA INFILE。INSERT INTO ... SELECT 是跨表複製利器。核心口訣:派生表必須有別名、別寫 VALUES、欄位順序對齊、大量分批。多表來源先 JOIN 成虛擬表再 SELECT,邏輯清晰且效能可控。