mysql :: masukkan ke tabel, data dari tabel lain?

187

Saya bertanya-tanya apakah ada cara untuk melakukan ini di sql:

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

Catatan: q1 akan mengembalikan sekitar 30rb baris.

Apakah ada cara untuk melakukan apa yang saya coba di atas dalam sql langsung? Untuk hanya menarik data langsung dari satu tabel (pada dasarnya tabel data mentah) dan menyisipkan ke tabel lain (pada dasarnya tabel data yang diproses)?

Hailwood
sumber

Jawaban:

401
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'
zerkms
sumber
1
@InSane: 1) berikan jawaban 2) koreksi format pertanyaan. Jangan lewatkan pesanan lain kali ;-)
zerkms
ha ha :-) yup..saya tidak pernah berhasil mendapatkan prioritas saya diurutkan! :-D
Jagmag
1
Kerja! +1 Sempurna dan sangat cepat! Terima kasih sobat. Hanya harus menghapus tanda kurung dari bidang SELECT ...
Seseorang
@zerkms; Akankah pemicu berfungsi dengan INSERT INTO ... SELECTpernyataan ini ?
haccks
2
@haccks Saya percaya sama seolah-olah itu hanya "normal"INSERT
zerkms
30

untuk seluruh baris

masukkan ke xyz pilih * dari xyz2 di mana id = "1";

untuk kolom yang dipilih

masukkan ke xyz (t_id, v_id, f_name) pilih t_id, v_id, f_name dari xyz2 di mana id = "1";
Lokesh Deshmukh
sumber
1
Pendekatan seluruh baris gagal jika sudah ada catatan dengan kunci utama yang cocok.
HotN
Apakah Anda menemukan solusi? <Pendekatan seluruh baris gagal jika sudah ada catatan dengan kunci primer yang cocok.>
Shivdhwaj Pandey
10

Dijawab oleh zerkms adalah metode yang benar. Tapi, jika seseorang ingin memasukkan lebih banyak kolom di tabel maka Anda bisa mendapatkannya dari yang berikut:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, '[email protected]', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

Dalam kueri di atas, ada 2 kolom tambahan bernama email & current_time .

IamMHussain
sumber
2
Bagaimana jika saya ingin memasukkan tiga baris data dengan nilai yang sama dari pilih tetapi nilai yang berbeda untuk kolom 'tambahan' ditambahkan seperti email dan current_time?
xxstevenxo
4
INSERT INTO Table1 SELECT * FROM Table2
Mher Arsh
sumber
Ini adalah jawaban berkualitas sangat rendah. Plus, tidak seperti jawaban yang diterima, itu bahkan tidak mencoba untuk berhubungan dengan informasi yang termasuk dalam pertanyaan.
Mike
0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

Analisis

Kita dapat menggunakan kueri di atas jika kita ingin menyalin data dari satu tabel ke tabel lain di mysql

  1. Di sini tabel sumber dan tujuan sama, kita dapat menggunakan tabel yang berbeda juga.
  2. Beberapa kolom yang tidak kami salin seperti style_id dan is_deleted sehingga kami memilihnya dengan kode dari tabel lain
  3. Tabel yang kami gunakan di sumber juga berisi bidang kenaikan otomatis sehingga kami meninggalkan kolom itu dan dimasukkan secara otomatis dengan eksekusi kueri.

Hasil eksekusi

1 kueri dieksekusi, 1 berhasil, 0 kesalahan, 0 peringatan

Kueri: masukkan ke preliminary_image (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) pilih ...

5 baris terpengaruh

Waktu Eksekusi: 0,385 detik Waktu Transfer: 0 detik Total Waktu: 0,386 detik

Amit Jain
sumber