首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL INSERT ... SELECT 多表字段組合插入:單表、多表 JOIN 與派生表別名必填規則

     編輯:MySQL 綜合教學

MySQL INSERT ... SELECT 多表字段組合插入:單表、多表 JOIN 與派生表別名必填規則

需求:從多張表查詢字段組合後插入目標表。INSERT INTO target SELECT ... FROM source 是標準寫法。多表時需先 JOIN 組合字段構成派生表,派生表必須指定別名,否則報 ERROR 1248: Every derived table must have its own alias。

1. 單表複製/轉移

INSERT INTO db1.tbl (col1, col2)
SELECT col1, col2 FROM db2.tbl;

2. 多表 JOIN 組合字段插入

場景:表 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;  -- 假設關聯鍵

3. 子查詢派生表寫法(通用模式)

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 或事務批量提交優化性能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved