需求:從多張表查詢字段組合後插入目標表。INSERT INTO target SELECT ... FROM source 是標準寫法。多表時需先 JOIN 組合字段構成派生表,派生表必須指定別名,否則報 ERROR 1248: Every derived table must have its own alias。
INSERT INTO db1.tbl (col1, col2) SELECT col1, col2 FROM db2.tbl;
場景:表 b 有 f1,表 c 有 f2,插入表 a 的 field1, field2。
INSERT INTO a (field1, field2) SELECT f1, f2 FROM b JOIN c ON b.id = c.b_id; -- 假設關聯鍵
INSERT INTO a (field1, field2)
SELECT *
FROM (
SELECT b.f1, c.f2
FROM b
JOIN c ON b.id = c.b_id
) AS derived_tbl; -- 別名 derived_tbl 必填
INSERT INTO a (field1, field2) SELECT * FROM (SELECT f1, f2 FROM b JOIN c); -- 缺少 AS alias,報 ERROR 1248
INSERT ... SELECT 列數、類型必須與目標表匹配。JOIN 再包一層 SELECT * FROM (...) AS alias。AS alias)強制要求,名稱任意但不可省略。LOAD DATA 或事務批量提交優化性能。