Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chèn MySQL vào Lựa chọn

Đôi khi bạn có thể cần phải chèn nhiều giá trị từ một bảng này vào một bảng khác trong MySQL. Có thể tẻ nhạt khi nhập thủ công các giá trị này vào câu lệnh INSERT sql của bạn. Dưới đây là cách dễ dàng sử dụng câu lệnh SELECT để chèn giá trị vào bảng với truy vấn CHÈN VÀO CHỌN trong MySQL. Bạn có thể sử dụng nó để nhanh chóng điền vào các bảng MySQL.

Chèn MySQL vào vùng chọn

Dưới đây là các bước để chèn giá trị trong bảng MySQL bằng cách sử dụng câu lệnh INSERT INTO SELECT. Giả sử bạn có bảng sau new_orders (id, order_date, amount)

mysql> create table new_orders(id int, order_date date, amount int);

Đây là cú pháp cho câu lệnh CHÈN VÀO CHỌN trong MySQL.

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table
WHERE
   condition;

Trong truy vấn trên, chúng tôi sử dụng câu lệnh SELECT, thay vì mệnh đề VALUES. Sẽ rất hữu ích khi sao chép nhanh một hoặc nhiều hàng từ một bảng khác hoặc thậm chí dữ liệu tóm tắt từ một bảng khác.

Phần thưởng Đọc:MySQL Chọn N Hàng đầu

Hãy để chúng tôi xem xét một vài ví dụ cho MySQL INSERT INTO SELECT.

CHÈN MySQL VÀO CHỌN NHIỀU ROWS

Đây là truy vấn SQL để chèn nhiều hàng vào bảng bằng cách sử dụng câu lệnh INSERT INTO SELECT.

mysql> insert into new_orders
       select id, order_date, item_price
       from orders;

mysql> select * from new_orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
+------+------------+--------+

Bạn có thể bỏ qua tên cột sau mệnh đề INSERT nếu tên cột trong câu lệnh SELECT giống với tên cột trong bảng của bạn.

Phần thưởng đã đọc:MySQL Xóa các bản ghi trùng lặp

CHÈN MySQL VÀO CHỌN TỪ CÙNG BẢNG

Đây là truy vấn SQL để chèn các hàng từ cùng một bảng bằng cách sử dụng câu lệnh CHÈN VÀO CHỌN.

mysql> insert into new_orders
       select *
       from new_orders;

mysql> select * from new_orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
+------+------------+--------+

Trong truy vấn trên, chúng tôi sử dụng MySQL INSERT INTO SELECT cho tất cả các cột trong bảng.

Phần thưởng đã đọc:Cách thực hiện quy trình đã lưu trữ

CHÈN MySQL VÀO CHỌN từ Cơ sở dữ liệu khác

Đây là truy vấn SQL để chèn các hàng từ một cơ sở dữ liệu khác trang tổng quan . Sự khác biệt duy nhất là thêm trước tên cơ sở dữ liệu vào tên bảng của bạn trong truy vấn CHỌN.

mysql> insert into users (user_id,date_joined)
select id,date_joined
from dashboard.auth_user;

Trong truy vấn trên, chúng tôi đã sử dụng dashboard.auth_user thay vì chỉ auth_user để chỉ định rằng bảng này nằm trong một cơ sở dữ liệu khác.

Phần thưởng đã đọc:MySQL Nhận bản ghi trùng lặp

CHÈN MySQL VÀO CHỌN trên bản cập nhật trùng lặp

Nếu bạn chèn các giá trị chỉ mục hoặc khóa chính trùng lặp trong bảng, MySQL sẽ gây ra lỗi. Trong câu lệnh INSERT INTO SELECT, bạn cũng có thể hướng dẫn MySQL cập nhật các cột cụ thể trong trường hợp các giá trị trùng lặp, sử dụng mệnh đề ON DUPLICATE KEY UPDATE. Dưới đây là một ví dụ về MySQL INSERT INTO SELECT trên bản cập nhật trùng lặp.

Giả sử bạn có bảng sau x_orders (id, số tiền)

mysql> create table x_orders(id int auto_increment primary key, amount int);

Giả sử bạn có bảng new_orders có các giá trị trùng lặp cho cột id.

mysql> select * from new_orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
+------+------------+--------+

Giả sử bạn cố gắng chèn các giá trị từ bảng new_orders vào x_orders. Bạn sẽ gặp lỗi như hình.

mysql> insert into x_orders(id,amount)
       select id, amount
       from new_orders;
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Đây là câu SQL để sử dụng mệnh đề CẬP NHẬT KHÓA DUPLICATE.

mysql> insert into x_orders(id,amount)
       select id, amount
       from new_orders
       on duplicate key update id = RAND() * 100;

mysql> select * from x_orders;
+----+--------+
| id | amount |
+----+--------+
| 27 |    235 |
| 48 |    150 |
| 58 |    235 |
| 62 |    150 |
+----+--------+

Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_VALUE () trong MySQL

  2. Làm cách nào để thực hiện THAM GIA NGOÀI TRỜI ĐẦY ĐỦ trong MySQL?

  3. Cách định dạng số bằng dấu phẩy trong MySQL

  4. Chọn các cột trên các cơ sở dữ liệu khác nhau

  5. Làm cách nào để hợp nhất hai bảng MySQL?