MySQL'de bir tablodan yeni bir tabloya veri nasıl kopyalanır?


143

MySQL'de bir tablodan diğerine veri kopyalamak istiyorum.

Tablo 1 (Mevcut tablo):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Tablo 2 (Yeni Tablo)

st_id
uid
changed
status
assign_status

Bazı veri alanlarını TABLO 1'den TABLO 2'ye kopyalamak istiyorum.

Bu MySQL sorguları kullanılarak yapılabilir mi?


1
Bu bir kerelik bir iş mi yoksa düzenli olarak yapmayı mı planlıyorsunuz?
jdias

@@ jdias: şimdiye kadar bir kez iş ..
Fero

@jdias Bir kerelik bir iş değilse, bir MySQL noob yerine ne yapmalı?
Seanny123

1
Veri çoğaltılmasını önlemek için büyük olasılıkla görüntüleme.
James Bradbury

Yanıtlar:


280

Bu istediğinizi yapar:

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

Tablo1'deki tüm satırları dahil etmek istiyorsanız. Aksi takdirde, yalnızca table1'in bir alt kümesini eklemek istiyorsanız sonuna bir WHERE ifadesi ekleyebilirsiniz.

Umarım bu yardımcı olur.


Harika, bunun T-SQL'de alışkın olduğumla aynı olduğunu görmekten memnunum.
jpierson

1
MySQL'i sevmenin bir nedeni daha, çok sezgisel!
peceps

Tüm table1 verilerini kopyalamak istiyorsanız, kopyalamadan önce yeni table2 oluşturmanız gerekir @SANDEEP
Pune from Pune

77

Alanları listelemek istemiyorsanız ve tabloların yapısı aynı ise, şunları yapabilirsiniz:

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

veya aynı yapıya sahip yeni bir tablo oluşturmak istiyorsanız:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Kesici uç seçimi için referans ; Tablo seçimi oluşturma referansı


2
neden [AS]köşeli parantez içinde, ASburada ne yapılır
Kasun Siyambalapitiya

3
Kelimenin isteğe bağlı olduğunu gösterir. Bu şekilde yazılmıştır çünkü dokümanlardan kopyalayıp yapıştırdım; hiçbir şey eklemez. ASDiğer SQL lehçelerinde zorunlu olduğunu düşünüyorum .
Bryan

22

Başka bir tablodan kolayca veri alabilirsiniz. Yalnızca istediğiniz alanları eklemelisiniz.

MySQL sorgusu:

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


burada, değerler table2'den table1'e kopyalanır


11
CREATE TABLE newTable LIKE oldTable;

Ardından, verileri kopyalamak için

INSERT INTO newTable SELECT * FROM oldTable;



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

2
Bu kod soruyu cevaplayabilirken, sorunun nasıl çözüldüğünü ve neden kullanılacağını açıklamak daha iyi olur. Yalnızca kod yanıtları uzun vadede yararlı değildir.
Tobias Liefke

0

Bu kodu deneyebilirsiniz

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

0

yukarıdaki sorgu yalnızca müşterinin eşleşen sütunlarına sahip istemciler tablosu oluşturduysak çalışır

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

0

İlk olarak table2 oluşturmalısınız.

tablo2'ye ekle (alan1, alan2, ...)
alan1, alan2, .... 'yi seçin
tablo1'den
nerede durum;

0

EĞER tablo varsa. old_tale'den table_name select * 'e eklemeyi deneyebilirsiniz;

EĞER tablo yoksa. old_table gibi tablo_adı oluşturmayı denemelisiniz; tablo_adı'na ekle old_tale'den select *;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.