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

SELECT và INSERT vào 2 bảng trong 1 truy vấn MySQL với UNION ALL

Kết hợp INSERT INTO ... SELECT với UNION ALL để chèn nhiều tập kết quả từ cùng một bảng nguồn vào bảng đích trong 1 truy vấn.

Ví dụ minh họa

Tạo 2 bảng:

CREATE TABLE DemoTable1 (StudentName VARCHAR(20), StudentMarks INT);
CREATE TABLE DemoTable2 (Name VARCHAR(20));
INSERT INTO DemoTable2 VALUES ('Chris');

Chèn 2 hàng vào DemoTable1 từ 1 hàng DemoTable2 với điểm khác nhau:

INSERT INTO DemoTable1 (StudentName, StudentMarks)
SELECT Name, 89 FROM DemoTable2
UNION ALL
SELECT Name, 98 FROM DemoTable2;

Kết quả

StudentNameStudentMarks
Chris89
Chris98

Giải thích

  • UNION ALL: Gộp 2 tập kết quả, giữ trùng lặp (khác với UNION loại trùng).
  • Mỗi SELECT trả về cùng cấu trúc cột (Name, Marks).
  • Chạy trong 1 transaction ngầm — tất cả thành công hoặc rollback toàn bộ.

Khi nào dùng?

  • Chèn nhiều bản ghi biến thể từ 1 nguồn (ví dụ: tạo bản ghi cho nhiều năm học từ 1 học sinh).
  • Chèn dữ liệu mẫu/test nhanh chóng.
  • ETL: phân chia 1 luồng dữ liệu thành nhiều luồng đích.

Lưu ý

  • Số cột và kiểu phải khớp giữa các SELECT và bảng đích.
  • UNION ALL nhanh hơn UNION (không sort để distinct).
  • MySQL không hỗ trợ INSERT INTO t1, t2 SELECT ... (multi-table insert) như Oracle — cần dùng trigger hoặc ứng dụng.