Câu lệnh INSERT INTO ... SELECT sao chép dữ liệu từ bảng này sang bảng khác. Cú pháp đúng: chỉ liệt kê cột đích, không dùng VALUES.
Ví dụ minh họa
Tạo bảng nguồn:
mysql> CREATE TABLE DemoTable1 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1(FirstName) VALUES('John'), ('Chris');
Tạo bảng đích (cấu trúc khác tên cột):
mysql> CREATE TABLE DemoTable2 (
CustomerId INT,
CustomerName VARCHAR(100)
);
Sao chép dữ liệu:
mysql> INSERT INTO DemoTable2(CustomerId, CustomerName)
-> SELECT Id, FirstName FROM DemoTable1;
Kiểm tra:
mysql> SELECT * FROM DemoTable2;
Kết quả
+------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | 1 | John | | 2 | Chris | +------------+--------------+
Lỗi 1064 thường gặp:
- Quên bỏ
VALUES(cú phápINSERT ... VALUES ... SELECTsai). - Số cột đích không khớp số cột
SELECT. - Kiểu dữ liệu không tương thích.
SELECT riêng trước để kiểm tra dữ liệu nguồn.