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)?

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'

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";

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`, 'example@domain.xyz', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

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


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.