วิธีคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางใหม่ใน MySQL?


143

ฉันต้องการคัดลอกข้อมูลจากตารางหนึ่งไปอีกตารางหนึ่งใน MySQL

ตารางที่ 1 (ตารางที่มีอยู่):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

ตารางที่ 2 (ตารางใหม่)

st_id
uid
changed
status
assign_status

ฉันต้องการคัดลอกข้อมูลบางส่วนจากตารางที่ 1 ลงในตารางที่ 2

สิ่งนี้สามารถทำได้โดยใช้แบบสอบถาม MySQL?


1
นี่เป็นงานครั้งเดียวหรือว่าคุณวางแผนที่จะทำอย่างสม่ำเสมอ?
jdias

@@ jdias: จนถึงตอนนี้มันเป็นงานครั้งเดียว ..
Fero

@jdias เพื่อชี้แจงหากไม่ได้งานเพียงครั้งเดียว MySQL noob ควรมีลักษณะอย่างไรในการทำแทน?
Seanny123

1
อาจดูเพื่อหลีกเลี่ยงการทำซ้ำข้อมูล
James Bradbury

สำเนาซ้ำที่เป็นไปได้ของข้อมูลลงในตารางอื่น
Marcus Vinicius Melo

คำตอบ:


280

สิ่งนี้จะทำสิ่งที่คุณต้องการ:

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

หากคุณต้องการรวมแถวทั้งหมดจาก table1 มิฉะนั้นคุณสามารถเพิ่มคำสั่ง WHERE ที่ส่วนท้ายหากคุณต้องการเพิ่มชุดย่อยของ table1 เท่านั้น

ฉันหวังว่านี่จะช่วยได้.


เยี่ยมมากดีใจที่ได้เห็นสิ่งนี้เหมือนกับสิ่งที่ฉันคุ้นเคยใน T-SQL
jpierson

1
อีกหนึ่งเหตุผลที่จะรัก MySQL ใช้งานง่ายมาก!
peceps

หากคุณต้องการคัดลอกข้อมูล table1 ทั้งหมดคุณต้องสร้าง table2 ใหม่ก่อนที่จะคัดลอก @SANDEEP
Sachin จาก Pune

77

หากคุณไม่ต้องการแสดงรายการเขตข้อมูลและโครงสร้างของตารางเหมือนกันคุณสามารถทำได้:

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

หรือถ้าคุณต้องการสร้างตารางใหม่ที่มีโครงสร้างเดียวกัน:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

การอ้างอิงสำหรับการเลือกแทรก ; อ้างอิงสำหรับสร้างตารางเลือก


2
ทำไม[AS]อยู่ในวงเล็บเหลี่ยมสิ่งที่ทำโดยASที่นี่
Kasun Siyambalapitiya

3
มันหมายถึงว่าคำว่าเป็นตัวเลือก มันถูกเขียนขึ้นเพราะฉันคัดลอกและวางจากเอกสาร มันไม่ได้เพิ่มอะไรเลย ฉันคิดว่าASมันเป็นข้อบังคับในภาษาถิ่น SQL อื่น ๆ
ไบรอัน

22

คุณสามารถรับข้อมูลจากตารางอื่นได้อย่างง่ายดาย คุณต้องเพิ่มฟิลด์เฉพาะที่คุณต้องการ

แบบสอบถาม MySQL คือ:

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


โดยที่ค่าจะถูกคัดลอกจาก table2 ไปยัง table1





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

2
ในขณะที่รหัสนี้อาจตอบคำถามมันจะดีกว่าที่จะอธิบายวิธีการแก้ปัญหาและทำไมต้องใช้มัน คำตอบแบบรหัสเท่านั้นไม่มีประโยชน์ในระยะยาว
Tobias Liefke

0

คุณสามารถลองรหัสนี้

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

0

แบบสอบถามด้านบนใช้งานได้เฉพาะในกรณีที่เราสร้างตารางลูกค้าด้วยคอลัมน์ที่ตรงกันของลูกค้า

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

0

คุณควรสร้าง table2 ก่อน

แทรกลงใน table2 (field1, field2, ... )
เลือก field1, field2, ....
จาก table1
ในกรณีที่สภาพ;

0

หากตารางนั้นมีอยู่ คุณสามารถลองแทรกลงใน table_name เลือก * จาก old_tale;

หากไม่มีตารางอยู่ คุณควรลองสร้างตาราง table_name เช่น old_table แทรกลงใน table_name เลือก * จาก old_tale;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.