mysql :: tabloya eklemek, başka bir tablodan veri?


187

Bunu tamamen sql'de yapmanın bir yolu olup olmadığını merak ediyordum:

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

Not: q1 yaklaşık 30 bin satır döndürür.

Yukarıda düz sql denedim ne yapmak için herhangi bir yolu var mı? Verileri doğrudan bir tablodan (temelde ham veri tablosu) çekmek ve başka bir tabloya (temel olarak işlenmiş veri tablosu) eklemek için mi?

Yanıtlar:


402
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) bir cevap verin 2) soru biçimlendirmesini düzeltin. Bir dahaki sefere sipariş kaçırmayın ;-)
zerkms

ha ha :-) yup..i asla önceliklerimi sıralamayı başaramadım! :-D
Jagmag

1
Çalışma! +1 Mükemmel ve çok hızlı! Teşekkürler dostum. Köşeli ayraçları SELECT alanlarından çıkarmak zorunda kaldı ...
Birisi

@zerkms; Tetikleyiciler bu INSERT INTO ... SELECTifadeyle çalışır mı?
1616

2
@haccks Ben sadece bir "normal" sanki aynı inanıyorumINSERT
zerkms

30

bütün sıra için

xyz içine yerleştirin xyz2'den * seçin id = "1";

seçilen sütun için

xyz'e ekleyin (t_id, v_id, f_name) xyz2'den t_id, v_id, f_name seçin; burada id = "1";

1
Eşleşen birincil anahtarla zaten var olan bir kayıt varsa, tüm satır yaklaşımı başarısız olur.
HotN

Herhangi bir çözüm buldunuz mu? <Birincil anahtar ile zaten mevcut bir kayıt varsa, tüm satır yaklaşımı başarısız olur.
Shivdhwaj Pandey

10

Zerkms tarafından cevaplanan doğru yöntemdir. Ancak, biri tabloya daha fazla sütun eklemek isteyen varsa, bunu aşağıdakilerden alabilirsiniz:

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'

Yukarıdaki sorguda, email & current_time adlı 2 sütun daha var .


2
E-posta ve current_time gibi eklenen 'ek' sütunlar için seçilen değerlerden aynı değerlere sahip ancak farklı değerlere sahip üç satır veri eklemek istersem ne olur?
xxstevenxo

4
INSERT INTO Table1 SELECT * FROM Table2

Bu çok düşük kaliteli bir cevaptır. Ayrıca, kabul edilen cevabın aksine, soruya dahil edilen bilgilerle ilgili olmaya bile çalışmaz.
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

analiz

Mysql'de bir tablodan başka bir tabloya veri kopyalamak istiyorsak yukarıdaki sorguyu kullanabiliriz

  1. Burada kaynak ve hedef tablo aynı, farklı tabloları da kullanabiliriz.
  2. Style_id ve is_deleted gibi kopyalamadığımız birkaç sütun , başka bir tablodan sabit kodlanmış olarak seçtik
  3. Kaynakta kullandığımız tablo, otomatik artış alanını da içerir, bu yüzden bu sütundan ayrıldık ve sorgu yürütüldüğünde otomatik olarak eklenir.

Yürütme sonuçları

1 sorgu yürütüldü, 1 başarı, 0 hata, 0 uyarı

Sorgu: ön_görüntüye ekle (style_id, pre_image_status, dosya_uzantı, reviewer_id, uploader_id, is_deleted, last_updated) seçin ...

5 satır etkilendi

Uygulama Süresi: 0.385 sn Transfer Süresi: 0 sn Toplam Süre: 0.386 sn

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.