Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chèn kết quả SELECT vào bảng khác (INSERT SELECT) trong MySQL

INSERT ... SELECT: Chèn dữ liệu từ truy vấn SELECT

Không cần VALUES. Cú pháp INSERT INTO bang1 (cot...) SELECT cot... FROM bang2 WHERE ... copy dữ liệu giữa các bảng.

Cú pháp

INSERT INTO bangMucTieu (cot1, cot2, ...)
SELECT cot1, cot2, ...
FROM bangNguon
WHERE dieu_kien;

Ví dụ minh họa

Tạo 2 bảng:

CREATE TABLE FirstTableDemo (StudentId INT, StudentName VARCHAR(100));
CREATE TABLE SecondTableDemo (Id INT, Name VARCHAR(100));

Chèn dữ liệu vào bảng nguồn:

INSERT INTO SecondTableDemo VALUES (1,'John'), (2,'Sam');

Copy sang bảng đích (tránh trùng ID):

INSERT INTO FirstTableDemo (StudentId, StudentName)
SELECT Id, Name FROM SecondTableDemo AS tbl1
WHERE tbl1.Id NOT IN (SELECT StudentId FROM FirstTableDemo);

Kết quả

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | John        |
|         2 | Sam         |
+-----------+-------------+

Các trường hợp dùng thường gặp

  • Backup/bảng tạm: CREATE TABLE backup AS SELECT * FROM goc;
  • ETL: Chuyển đổi dữ liệu khi chèn (SELECT UPPER(name), YEAR(dob)...).
  • Phân vùng dữ liệu: Chèn vào bảng partition theo tháng/năm.

Lưu ý

  • Số cột và kiểu dữ liệu SELECT phải khớp với danh sách cột INSERT.
  • Không dùng VALUES khi dùng SELECT.
  • Có thể dùng INSERT IGNORE hoặc ON DUPLICATE KEY UPDATE để xử lý trùng khóa.