Làm cách nào để sao chép dữ liệu từ bảng này sang bảng khác trong MySQL?


143

Tôi muốn sao chép dữ liệu từ bảng này sang bảng khác trong MySQL.

Bảng 1 (Bảng hiện có):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Bảng 2 (Bảng mới)

st_id
uid
changed
status
assign_status

Tôi muốn sao chép một số trường dữ liệu từ BẢNG 1 sang BẢNG 2.

Điều này có thể được thực hiện bằng cách sử dụng các truy vấn MySQL?


1
Đây có phải là công việc một lần hoặc bạn có kế hoạch để thực hiện nó thường xuyên?
jdias

@@ jdias: cho đến bây giờ đó là công việc một lần ..
Fero

@jdias Để làm rõ, nếu đó không phải là công việc một lần, thay vào đó, một noob MySQL nên làm gì?
Seanny123

1
Có lẽ lượt xem để tránh trùng lặp dữ liệu.
James Bradbury

Câu trả lời:


280

Điều này sẽ làm những gì bạn muốn:

INSERT INTO table2 (st_id,uid,changed,status,assign_status)
SELECT st_id,from_uid,now(),'Pending','Assigned'
FROM table1

Nếu bạn muốn bao gồm tất cả các hàng từ bảng1. Nếu không, bạn có thể thêm một câu lệnh WHERE vào cuối nếu bạn chỉ muốn thêm một tập hợp con của bảng1.

Tôi hi vọng cái này giúp được.


Thật tuyệt, rất vui khi thấy điều này giống như những gì tôi đã từng sử dụng trong T-SQL.
jpierson

1
Thêm một lý do để yêu MySQL, rất trực quan!
peceps

Nếu bạn muốn sao chép tất cả dữ liệu của bảng1 thì bạn phải tạo bảng2 mới trước khi sao chép @SANDEEP
Sachin từ Pune

77

Nếu bạn không muốn liệt kê các trường và cấu trúc của các bảng giống nhau, bạn có thể làm:

INSERT INTO `table2` SELECT * FROM `table1`;

hoặc nếu bạn muốn tạo một bảng mới có cùng cấu trúc:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Tham chiếu cho chèn chọn ; Tham khảo để tạo bảng chọn


2
Tại sao lại [AS]nằm trong dấu ngoặc vuông, những gì được thực hiện AStại đây
Kasun Siyambalapitiya

3
Nó biểu thị rằng từ này là tùy chọn. Nó được viết theo cách đó bởi vì tôi đã sao chép và dán từ các tài liệu; nó không thêm gì cả. Tôi nghĩ rằng điều ASnày là bắt buộc trong các phương ngữ SQL khác.
Bryan

22

Bạn có thể dễ dàng lấy dữ liệu từ một bảng khác. Bạn phải thêm các lĩnh vực chỉ bạn muốn.

Truy vấn mysql là:

INSERT INTO table_name1(fields you want)
  SELECT fields you want FROM table_name2


trong đó, các giá trị được sao chép từ bảng2 sang bảng1


11
CREATE TABLE newTable LIKE oldTable;

Sau đó, để sao chép dữ liệu qua

INSERT INTO newTable SELECT * FROM oldTable;



2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]

2
Mặc dù mã này có thể trả lời câu hỏi, nhưng sẽ tốt hơn để giải thích cách giải quyết vấn đề và lý do sử dụng nó. Câu trả lời chỉ có mã là không hữu ích trong thời gian dài.
Tobias Liefke

0

Bạn có thể thử mã này

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'',''
from Table_Name group by Id

0

truy vấn trên chỉ hoạt động nếu chúng ta đã tạo bảng khách hàng với các cột phù hợp của khách hàng

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer

0

Bạn nên tạo bảng2 trước.

chèn vào bảng2 (trường1, trường2, ...)
chọn trường1, trường2, ....
từ bảng1
nơi có điều kiện;

0

NẾU bảng tồn tại. bạn có thể thử chèn vào tên_bảng chọn * từ old_tale;

NẾU bảng không tồn tại. bạn nên thử tạo bảng tên_bảng như old_table; chèn vào tên_bảng chọn * từ old_tale;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.