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

MySQL: INSERT INTO SELECT - Điền dữ liệu vào bảng từ kết quả truy vấn

Câu lệnh INSERT ... SELECT cho phép chèn dữ liệu vào bảng đích từ kết quả SELECT của bảng nguồn (có thể khác database).

Cú pháp

INSERT INTO bang_dich (cot1, cot2, cot3, ...)
SELECT cot1, cot2, cot3, ... FROM bang_nguon;

Ví dụ minh họa

Bảng nguồn: PopulateTableDemo

mysql> CREATE TABLE PopulateTableDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Ten VARCHAR(20),
    -> SoTien INT,
    -> ThoiGianDen DATETIME
    -> );

mysql> INSERT INTO PopulateTableDemo(Ten, SoTien, ThoiGianDen) VALUES
    -> ('John', 456, '2018-02-04'),
    -> ('Carol', 1000, '2019-10-21'),
    -> ('Sam', 970, '2019-07-25'),
    -> ('Larry', 1050, '2015-10-28');

Bảng đích: PopulateQueryFromAnotherTable (cấu trúc tương tự, tên cột khác)

mysql> CREATE TABLE PopulateQueryFromAnotherTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> TenNguoiDung VARCHAR(20),
    -> Luong INT,
    -> ThoiGianDi DATETIME
    -> );

Thực hiện sao chép dữ liệu

mysql> INSERT INTO PopulateQueryFromAnotherTable (TenNguoiDung, Luong, ThoiGianDi)
    -> SELECT Ten, SoTien, ThoiGianDen FROM PopulateTableDemo;

Kết quả: Query OK, 4 rows affected

Kiểm tra bảng đích

mysql> SELECT * FROM PopulateQueryFromAnotherTable;
+----+------------+--------+---------------------+
| Id | TenNguoiDung | Luong  | ThoiGianDi          |
+----+------------+--------+---------------------+
| 1  | John       | 456    | 2018-02-04 00:00:00 |
| 2  | Carol      | 1000   | 2019-10-21 00:00:00 |
| 3  | Sam        | 970    | 2019-07-25 00:00:00 |
| 4  | Larry      | 1050   | 2015-10-28 00:00:00 |
+----+------------+--------+---------------------+

Lưu ý:

  • Số cột và kiểu dữ liệu SELECT phải khớp với cột INSERT
  • Cột AUTO_INCREMENT của bảng đích tự động sinh giá trị
  • Có thể thêm WHERE, GROUP BY, JOIN trong phần SELECT